题解 | #旋转数组的最小数字#

旋转数组的最小数字

https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba

class Solution:
    def minNumberInRotateArray(self , rotateArray: List[int]) -> int:
        # write code here
        if len(rotateArray) == 1:
            return rotateArray[0]
        left, right = 0, len(rotateArray)-1
        while left < right:
            mid = (left + right) // 2
            if rotateArray[mid] > rotateArray[right]:
                left = mid + 1
            elif rotateArray[mid] < rotateArray[right]:
                right = mid
            else:
                right = right - 1
        return rotateArray[left]
		
		
解题思路:
	python中有min函数和列表排序方法可求得最小值,但是这两种方法的时间复杂度为O(n),舍弃不用。
	
	该题用二分法来解决较为合适:
		1、特殊情况:列表长度为1,则最小值为列表中仅存在的那个值;
		2、因为列表为非降序列表且旋转,所以若中间值大于最末尾的值,则最小值在右半区间;反之若中间值小于最末尾的值,则最小值在左半区间;若中间值等于最末尾的值,表示该列表中存在重复值,我们只需将最左边的索引往前移动一个重新检查即可。

#python##算法##旋转数组的最小数字#
python 算法 文章被收录于专栏

python算法

全部评论

相关推荐

牛客38347925...:9,2学生暑期实习失利开始投小厂,给这群人整自信了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务