《劍指offer》面試題11 旋轉陣列的最小數字

2021-09-02 09:58:00 字數 1094 閱讀 4848

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

–例如,陣列為的乙個旋轉,該陣列的最小值為1。

分析:我們注意到旋轉之後的陣列實際上可以劃分為兩個排序的子陣列,而且前面子陣列的元素都大於或者等於後面子陣列的元素。和二分查詢法一樣,我們用兩個指標分別指向陣列的第乙個元素和最後乙個元素。按照這種思路,第乙個指標總是指向前面遞增陣列的元素,而第二個指標總是指向後面遞增陣列的元素。最終第乙個指標將指向前面陣列的最後乙個元素,而第二個指標會指向後面子陣列的第乙個元素。也就是它們最終會指向兩個相鄰的元素,而第二個指標指向的剛好是最小的元素。這就是迴圈結束的條件。

注意:考慮特殊情況(見**)

package chapter2;

public class p82_minnumberinrotatedarray else if(data[mid]==data[right])

}return data[left];

}public static void main(string args);

int data1=;

int target=3;

system.out.println(searchinrotatedarray(data,target));

system.out.println(findmin(data));

system.out.println(findmin(data1));

}}

**實現如下:

int min(int *numbers,int length)

return numbers[indexmid];

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

return result;

}

測試用例:

a.功能測試(輸入的陣列是公升序排序陣列的乙個旋轉,陣列中有重複數字或者沒有重複數字)。

b.邊界值測試(輸入的陣列是乙個公升序排序的陣列,只包含乙個數字的陣列)。

c.特殊輸入測試(輸入nullptr指標)。

劍指offer 面試題11 旋轉陣列的最小數字

完整 位址 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。這道題目相對前面的比較複雜,坑比較多 此時用二分法解決,mi...

劍指Offer面試題11 旋轉陣列的最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。牛客網ac class solution int left 0,right...

劍指offer 面試題11 旋轉陣列中的最小數字

時間複雜度o logn 解題思路 1.旋轉陣列是兩段遞增的序列,如果 中間元素 左端元素 右端元素 從前到後遍歷元素 如果中間元素 左端元素 最小值在第二段,更新左端指標,如果中間元素 左端元素 中間元素 右端元素 最小值在第一段,更新右邊的指標。public static void main st...