zoukankan      html  css  js  c++  java
  • Leetcode练习(Python):数组类:第154题:假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 注意数组中可能存在重复的元素。

    题目:
    假设按照升序排序的数组在预先未知的某个点上进行了旋转。  ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。  请找出其中最小的元素。  注意数组中可能存在重复的元素。  

    说明:

    思路:
    仍然使用二分法,考虑到会存在重复元素的情况,因此当判断到有重复数字时(nums[middle] == nums[tail])时,使用tail--。
    程序:
    class Solution:
        def findMin(self, nums: List[int]) -> int:
            length = len(nums)
            if length <= 0:
                return 0
            if length == 1:
                return nums[0]
            head = 0
            tail = length - 1
            while head < tail:
                middle = (head + tail) // 2
                if nums[middle] > nums[tail]:
                    head = middle + 1
                elif nums[middle] < nums[tail]:
                    tail = middle
                else:
                    tail -= 1
            output = head
            return nums[head]
  • 相关阅读:
    被学长教会的高斯消元法Gauss
    KMP字符串匹配算法翔解❤
    fkwの题目(祝松松生日快乐!)
    NOI-linux下VIM的个人常用配置
    从2017年暑假到现在手打的模板↑_↑
    【テンプレート】初级数据结构
    【テンプレート】高精
    DP(第二版)
    luogu P1029 最大公约数和最小公倍数问题
    贪心题整理
  • 原文地址:https://www.cnblogs.com/zhuozige/p/12774054.html
Copyright © 2011-2022 走看看