把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為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...