找一个数组里头最小的数字
最简单的方法就是O(N)啦
一个一个找过去就行了
我想到的好点的方法是logn
使用二分查找
这样可以利用已经给的信息:数组前一部分是递增的后半部分是递减的
目标:找到递增递减突变的点
如果可以画出函数求导图的话…那个点就很明显…
不扯了…进入正题…
所以使用二分查找
这里和普通二分查找不同的地方是,普通二分查找要找的是一模一样的元素
此处要找的是突变点
记start(s)为待查找数组的首下表,end(e)为尾下标,mid=(s+e)/2即中值
如果说arr[s]>arr[0] 同时arr[mid]<arr[0]同时m-s=1 很明显,mid为突变点
如果arr[mid]>arr[0]同时arr[e]<arr[0]同时e-m=1很明显,e为突变点
ojbk 码代码把
class Solution:
def minNumberInRotateArray(self, rotateArray): # 题意版本,利用从小到大的信息,使用二分查找
len1=len(rotateArray)
if (len(rotateArray) == 0):
return 0
if (len(rotateArray) == 1):
return rotateArray[0]
s=0
e=len1-1
mid=(int)((s+e)/2)
while(True):
if(rotateArray[mid]>=rotateArray[0]):
s=mid
if(rotateArray[e]<rotateArray[0] and e-1==mid):
return rotateArray[e]
elif(rotateArray[mid]<rotateArray[0]):
e=mid
if(rotateArray[s]>rotateArray[0] and mid-1==s):
return rotateArray[mid]
mid = (int)((s + e) / 2)
本文介绍了一种在旋转数组中寻找最小数值的高效算法。通过利用数组特性,采用二分查找法,能够在logn时间内定位到数值突变点,从而找到最小值。文章详细解析了算法实现过程,并提供了Python代码示例。
254

被折叠的 条评论
为什么被折叠?



