11 旋轉陣列的最小數字

2021-09-29 05:30:49 字數 1546 閱讀 3445

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

我的**:二分法

class

min:

defsolution

(self,nums)

: a = nums[0]

b = nums[-1

]iflen(nums)==1

:return nums[0]

elif

len(nums)==0

:return

none

elif areturn a

else

:while nums.index(b)

-nums.index(a)!=1

:while nums[

(nums.index(a)

+nums.index(b))//

2]>a:

a = nums[

(nums.index(a)

+nums.index(b))//

2]while nums[

(nums.index(a)

+nums.index(b))//

2]b = nums[

(nums.index(a)

+nums.index(b))//

2]return b

看上去很繁瑣,而且為什麼不直接用指標?我的**有很多重複步驟。

別人的**:

class

solution

:def

findmin

(self, nums: list[

int])-

>

int:

left =

0 right =

len(nums)-1

while left < right:

mid = left +

(right - left)//2

if nums[right]

< nums[mid]

: left = mid +

1else

: right = mid

return nums[left]

in-rotated-

sorted

-array/solution/er-fen-by-powcai-

2/

邏輯很清晰:

二分法, 二分法就是找與mid判斷條件,這裡我們選用right

當nums[mid] > nums[right]說明在mid左半邊的遞增區域, 說明最小元素在》 mid區域

當nums[mid] <= nums[right說明在mid右半邊的遞增區域, 說明最小元素在<= mid區域

小技巧:

一般是這樣,

當while left < right是迴圈外輸出

當while left <= right是迴圈裡輸出

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...

11 旋轉陣列的最小數字

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

11 旋轉陣列的最小數字

class solution1 int res array 0 遍歷陣列,找出最小值 for int i 1 i array.length i return res class solution2 if nums.length 1 nums nums.length 1 nums 0 int p1 0...