zoukankan      html  css  js  c++  java
  • 154寻找旋转排序数组中的最小值II

    题目:

    法一:自己的代码

    思路:同153一样,只不过如果遇到相等的,先缩小范围直到不相等,

    from typing import List
    class Solution:
        def findMin(self, nums: List[int]) -> int:
            left = 0
            right = len(nums) - 1
            res = float('inf')
            while left < right:
                mid = (left + right) >> 1
                if nums[left] == nums[right]:
                    left = left + 1
                elif nums[mid] == nums[right]:
                    right = right - 1
                    res = min(nums[mid], res)
                elif nums[mid] == nums[left]:
                    left = left + 1
                    res = min(nums[mid], res)
                else:
                    if nums[right] < nums[left]:
                        if nums[mid] < nums[right]:
                            res = min(nums[mid], res)
                            right = mid
                        else:
                            res = min(nums[right], res)
                            left = mid + 1
                    else:
                        res = min(nums[left], res)
                        right = mid
            return min(res, nums[left])
    if __name__ == '__main__':
        solution = Solution()
        # result = solution.findMin([4,5,6,7,0,1,2])
        # result = solution.findMin([2,2,2,0,1])
        # result = solution.findMin([2,0,1,1,1])
        result = solution.findMin([1,2,2,2,0,1,1])
        print(result)
    View Code

    改进后的代码:

    思路:同153改进后的一样,仍然是用中间端点和右边端点的关系进行讨论,只不过多加了对相等情况的处理,

    class Solution:
        def findMin(self, nums: List[int]) -> int:
            left, right = 0, len(nums) - 1
            while left < right:
                mid = (left + right) // 2
                if nums[mid] > nums[right]: left = mid + 1
                elif nums[mid] < nums[right]: right = mid
                else: right = right - 1 # key
            return nums[left]
    
    
    作者:jyd
    链接:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/solution/154-find-minimum-in-rotated-sorted-array-ii-by-jyd/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    View Code

    ttt

  • 相关阅读:
    服务器文档下载zip格式
    关于精度,模运算和高精的问题//19/07/14
    Luogu P2010 回文日期 // 暴力
    树形DP水题集合 6/18
    普通背包水题集合 2019/6/17
    因为时间少
    重学树状数组6/14(P3368 【模板】树状数组 2)
    Luogu P1291 [SHOI2002]百事世界杯之旅 // 易错的期望
    Luogu P4316 绿豆蛙的归宿//期望
    树剖
  • 原文地址:https://www.cnblogs.com/xxswkl/p/12358532.html
Copyright © 2011-2022 走看看