JZ 11 旋轉陣列的最小數字(二分查詢)

2021-10-21 02:11:13 字數 1711 閱讀 4321

設陣列最後乙個元素為 x ,在最小元素右側的元素,它們的值一定都小於等於 x ;在最小元素左側的元素,它們的值一定都大於等於 x 。

在二分查詢每一步中,設左邊界為 low

lowlo

w,右邊界為 hig

hhigh

high

,區間中點為 piv

otpivot

pivo

t。將中軸元素 num

bers

[piv

ot]numbers[pivot]

number

s[pi

vot]

與右邊界元素 num

bers

[hig

h]numbers[high]

number

s[hi

gh] 進行比較:

當n um

bers

[pivot]

mber

s[hi

gh]numbers[pivot] < numbers[high]

number

s[pi

vot]

mber

s[hi

gh]時,說明中軸元素在最小元素右側,可以忽略查詢區間的右半部分。

當n um

bers

[piv

ot]>nu

mber

s[hi

gh]numbers[pivot] > numbers[high]

number

s[pi

vot]

>nu

mber

s[hi

gh]時,說明中軸元素在最小元素左側,可以忽略查詢區間的左半部分。

當n um

bers

[piv

ot]=

numb

ers[

high

]numbers[pivot] = numbers[high]

number

s[pi

vot]

=num

bers

[hig

h]時,無法判斷中軸元素和最小元素的位置關係,但可以確保無論右邊界元素是不是最小元素,都存在替代品,即中軸元素,所以可以忽略右邊界元素,即,將區間右端向左縮小一位繼續查詢。

class
solution

else

if(numbers[pivot]

> numbers[high]

)else

}return numbers[low];}

}notes:關於二分時用的是low

+(hi

gh−l

ow)/

2low + (high - low)/2

low+(h

igh−

low)

/2而非( lo

w+hi

gh)/

2(low + high)/2

(low+h

igh)

/2,是為了避免兩數相加時發生溢位。

JZ 11 旋轉陣列的最小數字

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

11 旋轉陣列的最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。我的 二分法 class min defsolution self,nums a nums 0 b nums 1 iflen num...

11 旋轉陣列的最小數字

二分法搜尋方法 include using namespace std intmin int numbers,int length int index1 0 int index2 length 1 int indexmid index1 while numbers index1 numbers in...