劍指offer 旋轉陣列找最小值

2021-10-02 17:34:56 字數 1244 閱讀 5237

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。

輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。

例如陣列為的乙個旋轉,該陣列的最小值為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...