旋轉陣列的最小數字

2021-07-10 18:52:54 字數 1772 閱讀 8788

題目:把乙個陣列最開始的若干個元素搬到陣列的末尾,稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。

eg:陣列的其中的乙個旋轉陣列為,該陣列的最小值是1。

#includeusing namespace std;

int mininorder(int* numbers, int index1, int index2);

int min(int* numbers, int length)

// 如果下標為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)

return result;

}// ********************測試**********************

void test(int* numbers, int length, int expected)

catch (...)

}int main(int argc, char* argv)

; test(array1, sizeof(array1) / sizeof(int), 1);

// 有重複數字,並且重複的數字剛好的最小的數字

int array2 = ;

test(array2, sizeof(array2) / sizeof(int), 1);

// 有重複數字,但重複的數字不是第乙個數字和最後乙個數字

int array3 = ;

test(array3, sizeof(array3) / sizeof(int), 1);

// 有重複的數字,並且重複的數字剛好是第乙個數字和最後乙個數字

int array4 = ;

test(array4, sizeof(array4) / sizeof(int), 0);

// 單調公升序陣列,旋轉0個元素,也就是單調公升序陣列本身

int array5 = ;

test(array5, sizeof(array5) / sizeof(int), 1);

// 陣列中只有乙個數字

int array6 = ;

test(array6, sizeof(array6) / sizeof(int), 2);

// 輸入null

test(null, 0, 0);

return 0;

}

在這個題目上最容易出現的錯誤就是測試用例考慮不全,使程式少了健壯性。

測試用例:

功能測試(輸入的陣列中有重複的數字或者沒有重複的數字)

邊界值測試(陣列中只包含乙個數字)

特殊輸入測試(輸入null指標)

旋轉陣列最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列 為的乙個旋轉,該陣列的最小值為1。code int min int numbers,int length int low 0 int high length 1 in...

旋轉陣列最小數字

旋轉陣列最小數字 劍指offer 二分查詢 題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。解題思路 題目要求找到最小元素,第一反應是排序,但陣列基本有序直接排序浪費效能。結合資料的特點前半部分遞增,後半部分遞減,...

旋轉陣列的最小數字

1.問題描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出該旋轉陣列的最小元素。例如陣列 3,4,5,1,2 為 1,2,3,4,5 的乙個旋轉,該陣列的最小值為1.來自 劍指offer 2.分析 首先我們可以看到原陣列為遞增排序的,並且以...