zoukankan      html  css  js  c++  java
  • LeetCode 153. Find Minimum in Rotated Sorted Array 20170706

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

    (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

    Find the minimum element.

    You may assume no duplicate exists in the array.

    题目大意:一个有序数组可能以某个数为轴调换顺序,请找出最小值。

    解题思路:一开始最直观的想法是,遍历整个数组,如果碰到某个数比他的前一个数要小的话,该数就是最小值。如果遍历完整个数组都没有出现这种情况的话,那么数组的第一个数就是最小值。该算法的时间复杂度是O(n)。实现该算法后,为了提升算法的时间复杂度,发现可以直接用二分法搜索最小值,时间复杂度只需要O(logn)。

    class Solution(object):
      def findMin(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        res = 0
        sign = 0
        if len(nums)==0:
          return;
        if len(nums)==1:
          return nums[0];
        for i in range(1,len(nums)):
          if nums[i]<nums[i-1]:
            res=nums[i]
            sign=1
            break
        if sign==0:
          return nums[0]
        return res

    二分法

    class Solution(object):
      def findMin(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if len(nums) == 1:
          return nums[0]
        if len(nums) == 2:
          return min(nums[0],nums[1])
        mid = len(nums)/ 2
        if nums[mid - 1] > nums[mid]:
          return nums[mid]
        if nums[mid] < nums[-1]:
          return self.findMin(nums[:mid + 1])
        return self.findMin(nums[mid:])

  • 相关阅读:
    搜索文件/目录的shell脚本
    git的编译安装
    linux命令行直接执行MySQL/MariaDB语句查询
    MySQL重置root密码
    图解TCP/IP三次握手
    使用pull命令从Docker Hub仓库中下载镜像到本地
    BZOJ1051 [HAOI2006]受欢迎的牛(Tarjan缩点)
    BZOJ1026 [SCOI2009]windy数(数位DP)
    CERC2017 H Hidden Hierarchy(树+模拟)
    2018icpc徐州网络赛-H Ryuji doesn't want to study(线段树)
  • 原文地址:https://www.cnblogs.com/fangdai/p/7126990.html
Copyright © 2011-2022 走看看