亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

旋轉數組中的最小數字

發布時間: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

临澧县| 荣昌县| 华安县| 涿鹿县| 南昌县| 赤城县| 朝阳区| 体育| 赫章县| 濮阳县| 无锡市| 南皮县| 海晏县| 林芝县| 盐源县| 安阳县| 古浪县| 黄浦区| 南通市| 平安县| 社旗县| 南江县| 门头沟区| 偏关县| 成武县| 富平县| 拜城县| 循化| 扬中市| 郯城县| 孟州市| 丽水市| 虞城县| 牡丹江市| 莒南县| 和林格尔县| 五台县| 合作市| 乳山市| 康保县| 南澳县|