劍指offer 旋轉陣列的最小數字

2022-02-05 22:24:25 字數 1161 閱讀 4095

思路:由於陣列是遞增的。所以可以考慮2分查詢。能達到o(logn)時間複雜度。

參考圖示應該可以看出2個指標的變化情況。如果arr[mid]>=arr[p1],則說明p1的位置要變成mid的位置。如果arr[mid]<=arr[p2],那說明p2的位置要變成mid的位置。

跳出迴圈的條件就是arr[p1]其中有幾個點需要注意一下,1是空元素的判斷,2是如果只有2個元素的時候。3.如果陣列沒有旋轉,也能稱之為將前面的0個元素搬到陣列後面。

都在**中有所備註。

public

class

solution

if (array.length <= 0)

//定義2個指標

int low = 0;

int hight = array.length - 1;

int mid=0;//3 將mid的初始值設為0。就是第三種情況,直接返回第乙個元素就可以了。while (array[low] >=array[hight])

mid = low + (hight - low) / 2;

if (array[low] <=array[mid])

else

if (array[mid] <=array[hight])

//這是劍指offer書裡面對這題的更細的分析,對low,mid,hight3者相等的情況進行了判斷。(但測試過了沒有這個判斷牛客網也能估計ac,也寫上來萬一面試問到了呢)

if(array[low] == array[mid] && array[low] == array[hight]

return  mininorder(array,low,hight);

}return

array[mid];

}//當3個值都相同的時候,只能從頭開始遍歷了。

private

int mininorder(int arr, int low, int

hight)

}return

result;}}

劍指offer 旋轉陣列的最小數

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。public class test system.out.pr...

劍指offer 旋轉陣列的最小數字

題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個排好序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。分析 這道題最直觀的解法並不難。從頭到尾遍歷陣列一次,就能找出最小的元素,時間複雜度顯然是o n 但這個思路沒有利用輸入陣列的特性...

劍指offer 旋轉陣列的最小數字

記錄來自 劍指offer 上的演算法題。題目描述如下 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個選擇,輸出旋轉陣列的最小元素。例如陣列是的乙個旋轉,該陣列的最小值是1。這裡可以採用二分查詢的想法,使用兩個指標,乙個指向第乙個元素,乙個指向末尾元素,...