Advertisement

实现Python算法以查找旋转数组中的最小元素

阅读量:

查找旋转数组的最小值

假设一个排序数组以某个未知元素作为pivot point进行了旋转操作。例如:原始有序序列是0,1,2,4,5,6,7,在旋转之后变为4,5,6,7,0,1.2.请找出旋转后的最小值,并假设数组中的所有元素都是唯一的。

分析思路

经过旋转后的数组实际上可以划分为两个有序的部分:其中前一部分的所有元素均大于后一部分的所有元素
4,5,6,7,0,1,2
值得注意的是,在这种情况下最小值即为两部分之间的分界点。

令left和right分别标记数组的起始和结束索引,并确保所有元素唯一。
对于普通升序子数组而言,在这种情况下有A[left] < A[right]。
当子数组呈现循环升序特征时,在这种情况下有A[left] > A[right]。
计算中间索引mid为( low + high )的一半。
显然,在这种分割方式下必然会产生一个呈现循环升序特性的子数组与一个普通升序特性子数组。
当遇到情况A[mid]>A[high]时,请确认此时认为位于mid+1到high范围内的子区间呈现出循环升序特征,并将low更新为mid+1;
反之则表明当前区间遵循普通递增顺序排列,并应将high调整至mid的位置。

Python代码

复制代码
    def find_min(li):
    low = 0
    h

全部评论 (0)

还没有任何评论哟~