91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

旋轉數組中的最小數字

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

舞阳县| 聂荣县| 格尔木市| 芦山县| 伊金霍洛旗| 长泰县| 苍山县| 和田市| 德化县| 达孜县| 大埔区| 营口市| 武汉市| 贡嘎县| 宽城| 长治县| 赤峰市| 襄城县| 阳信县| 通江县| 甘孜县| 泸西县| 施秉县| 眉山市| 潼关县| 德昌县| 鄂伦春自治旗| 莱阳市| 克山县| 刚察县| 伊川县| 绥中县| 策勒县| 乌拉特前旗| 南靖县| 石棉县| 清水县| 武邑县| 鄢陵县| 台南市| 澜沧|