中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

旋轉數組中的最小數字

發布時間:2020-07-09 15:55:25 來源:網絡 閱讀:359 作者:duanjiatao 欄目:編程語言

題目描述:把一個數組最開始的若干個元素移動到數組的末尾,稱之為一個數組的旋轉。輸入一個遞增排序的數組的旋轉,輸出旋轉數組的最小元素。


例如:數組 {3,4,5,1,2} 為{1,2,3,4,5} 的一個旋轉,該數組的最小元素為 1。

分析:旋轉數組中的最小數字

旋轉數組中的最小數字

旋轉數組中的最小數字

旋轉數組中的最小數字

旋轉數組中的最小數字

旋轉數組中的最小數字

旋轉數組中的最小數字

旋轉數組中的最小數字

旋轉數組中的最小數字

int Min(int* numbers, int length)
{
    if(numbers == NULL || length <= 0)
        throw new std::exception("Invalid parameters");
 
    int index1 = 0;
    int index2 = length - 1;
    int indexMid = index1;
    while(numbers[index1] >= numbers[index2])
    {
        // 如果index1和index2指向相鄰的兩個數,
        // 則index1指向第一個遞增子數組的最后一個數字,
        // index2指向第二個子數組的第一個數字,也就是數組中的最小數字
        if(index2 - index1 == 1)
        {
            indexMid = index2;
            break;
        }
 
        // 如果下標為index1、index2和indexMid指向的三個數字相等,
        // 則只能順序查找
        
        indexMid = (index1 + index2) / 2;
        // 縮小查找范圍
        if(numbers[indexMid] >= numbers[index1])
            index1 = indexMid;
        else if(numbers[indexMid] <= numbers[index2])
            index2 = indexMid;
    }
 
    return numbers[indexMid];
}

旋轉數組中的最小數字

旋轉數組中的最小數字

旋轉數組中的最小數字

旋轉數組中的最小數字

旋轉數組中的最小數字

int Min(int* numbers, int length)
{
    if(numbers == NULL || length <= 0)
        throw new std::exception("Invalid parameters");
 
    int index1 = 0;
    int index2 = length - 1;
    int indexMid = index1;
    while(numbers[index1] >= numbers[index2])
    {
        // 如果index1和index2指向相鄰的兩個數,
        // 則index1指向第一個遞增子數組的最后一個數字,
        // index2指向第二個子數組的第一個數字,也就是數組中的最小數字
        if(index2 - index1 == 1)
        {
            indexMid = index2;
            break;
        }
 
        // 如果下標為index1、index2和indexMid指向的三個數字相等,
        // 則只能順序查找
        indexMid = (index1 + index2) / 2;
        if(numbers[index1] == numbers[index2] && numbers[indexMid] == numbers[index1])
            return MinInOrder(numbers, index1, index2);

        // 縮小查找范圍
        if(numbers[indexMid] >= numbers[index1])
            index1 = indexMid;
        else if(numbers[indexMid] <= numbers[index2])
            index2 = indexMid;
    }
 
    return numbers[indexMid];
}

int MinInOrder(int* numbers, int index1, int index2)
{
    int result = numbers[index1];
    for(int i = index1 + 1; i <= index2; ++i)
    {
        if(result > numbers[i])
            result = numbers[i];
    }

    return result;
}

旋轉數組中的最小數字旋轉數組中的最小數字旋轉數組中的最小數字旋轉數組中的最小數字旋轉數組中的最小數字旋轉數組中的最小數字旋轉數組中的最小數字旋轉數組中的最小數字旋轉數組中的最小數字旋轉數組中的最小數字旋轉數組中的最小數字旋轉數組中的最小數字旋轉數組中的最小數字

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开鲁县| 辽源市| 云林县| 江川县| 新干县| 综艺| 元江| 宣威市| 双流县| 桦甸市| 新闻| 通城县| 昔阳县| 苍溪县| 枣强县| 盈江县| 朝阳市| 加查县| 肇东市| 成武县| 旺苍县| 台北县| 隆化县| 和顺县| 扎赉特旗| 蒙城县| 新安县| 咸丰县| 潼南县| 从化市| 上栗县| 池州市| 黄浦区| 环江| 贺州市| 太康县| 运城市| 高雄市| 长沙县| 浙江省| 阳原县|