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

2021-08-01 04:46:30 字數 1233 閱讀 2950

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

note:給出的所有元素都大於0,若陣列大小為0,請返回0。

package test.test;

/** * 遞增陣列的旋轉陣列 如:的旋轉陣列之一是

* 即:將 123 三個數旋轉到末尾,此時陣列是兩個遞增陣列 345 和 12 ,前面陣列的值都會大於後面陣列的值。

* 最小值就是兩個陣列的分界值,也是後面較小陣列的第乙個值。此時可以利用類似二分法來查詢

* min是首位,max是末位,mid = (min + max) / 2

* 若 array[mid] > array[min] 則說明 mid 位處於前半組較大的陣列內,分界值在mid位後,所以令min = mid;

* 若 array[mid] < array[min] 則說明 mid 位處於後半組較小的陣列內,分界值在mid位前,所以令max = mid;

* 按此賦值,min 始終位於前面較大陣列內,max 始終位於後面較小陣列內

* 直到min是較大陣列的最後一位,同時max為較小陣列第一位,此時他們相差1, 最小值就是max位所在值。

* * 當 min mid max 三個位置的值都相等時, 比如:{1,0,1,1,1} 和 {1,1, 1,0,1}

* 此時無法判斷分界值0到底處於前半段還是後半段,因此此時只能暴力查詢了。

* */

public

class

testminnumberinrotatearray

public

intminnumberinrotatearray(int array)

mid = (min + max) / 2;

// 若前中後三個位置的大小一致,則無法判斷分界值在前半段還是後半段,只能暴力搜尋了。

if (array[min] == array[mid] && array[max] == array[mid]) }}

if (array[mid] >= array[max]) else

if (array[mid] < array[max])

}return array[max];

}public

static

void

main(string args) ));

}}

劍指offer 旋轉陣列的最小數

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

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

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

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

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