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:])

  • 相关阅读:
    fastText源码分析
    excel文件使用html导出
    oracle中对字符串进行分割,并反回随机段
    oracle锁表进行关闭
    .net中MVC Webapi多参数调用控制器方法
    C#线程调用带参数的方法,给控件赋值
    C#post调用接口并上传文件
    C#调用GPG命令进行加密解密文件操作
    C#中图片转换为Base64编码,Base64编码转换为图片
    GPG加密windows中使用
  • 原文地址:https://www.cnblogs.com/fangdai/p/7126990.html
Copyright © 2011-2022 走看看