把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。
輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。
例如陣列為的乙個旋轉,該陣列的最小值為1。
note:給出的所有元素都大於0,若陣列大小為0,請返回0。
思路:根據旋轉陣列的定義可知旋轉陣列可分為兩個有序序列,可用二分法查詢。
定義三個指標,left,right,mid=(left+right)//2,通過比較left,right與mid的值找出最小值
如果leftmid,說明mid指標所指向的值屬於後一串行,移動right=mid
直到right-left==1,查詢結束,right所指向的即為最小值
注:需考慮陣列長度為1的情況下
**:
# -*- coding:utf-8 -*-
class
solution
:def
minnumberinrotatearray
(self, rotatearray)
:# write code here
# if len(rotatearray) == 0:
# return 0
# rotatearray.sort()
# print(rotatearray[0])
lens =
len(rotatearray)
if lens ==0:
return
0if lens ==1:
return rotatearray[0]
left =
0 right = lens-
1#旋轉陣列由兩個有序序列組成,如3,4,5,1,2
#小於說明中間值屬於前乙個有序序列,此時使left = mid
#大於否則屬於後乙個序列,使right = mid
while
(right-left)!=1
: mid =
(left + right)//2
if rotatearray[left]
<=rotatearray[mid]
: left = mid
if rotatearray[right]
>= rotatearray[mid]
: right = mid
return rotatearray[right]
劍指offer 找旋轉數列中的最小值
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。數列是兩個遞增的子串行組成的,所以找到他們組合的那個點就好了。從頭開始找...
劍指offer 尋找旋轉陣列的最小值
題目 陣列有序,旋轉後找最小值,先看無重複情形。例子 旋轉後,最小值1。思路 觀察上圖,v mid 小於v right 1都在左側 包含mid 1.無重複數字 include using namespace std int small vector v else 最小值在右側 return v le...
劍指Offer 求旋轉陣列的最小值
首先介紹下旋轉陣列 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。例如陣列 為 的乙個旋轉。使用二分查詢的思想 根據這個規律就可以用o logn 的時間複雜度來尋找到最小值la package jianzhioffer public class minnumberinrotate...