zoukankan      html  css  js  c++  java
  • 【LeetCode每天一题】Find Minimum in Rotated Sorted Array(旋转数组中最小的值)

    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.

    Example 1:

    Input: [3,4,5,1,2] 
    Output: 1
    

    Example 2:

    Input: [4,5,6,7,0,1,2]
    Output: 0

    思路

      旋转数组的定义如上面所示,我们需要在里面找到最小的数字。最简单的方法就是使用遍历的办法。从头开始遍历数字,当遇到一个当前数字比前一个数字小的时候,该数组就是最小的数字。这种解法的时间复杂度为O(n),空间复杂度为O(1)。另外,我们还可以利用二分查找算法来解决,每次将查找的返回缩小一半,直到最后找到数字。返回结果。时间复杂度为O(log n),空间复杂度为O(1)。
    解决代码

      二分查找解法
     1 class Solution(object):
     2     def findMin(self, nums):
     3         """
     4         :type nums: List[int]
     5         :rtype: int
     6         """
     7         left, right = 0, len(nums)-1   # 头尾指针
     8         while left <= right:           
     9             if nums[left] <= nums[right]:    
    10                 return nums[left]
    11             mid = (left+right) // 2        # 取中间值
    12             if nums[left] > nums[mid]:    # 如果左边值大于中间值,则说明最小值可能是mid或者在mid前面。
    13                 right = mid
    14             else:                         # 否则最小值在mid的后面部分,缩小左边的查找范围
    16                 left = mid +1

      遍历解法

     1 class Solution(object):
     2     def findMin(self, nums):
     3         """
     4         :type nums: List[int]
     5         :rtype: int
     6         """
     7         if not nums:
     8             return nums
     9         for i in range(1, len(nums)): # 从第一个开始遍历
    10             if nums[i] < nums[i-1]:     # 如果当前元素小于前一个元素,则说明是最小值,直接返回结果
    11                 return nums[i]    
    12         return nums[0]                  #  遍历完毕说明最小值就是第一个元素
  • 相关阅读:
    每天拿出来2小时浪费(文/王路) 作者: 王路
    objective-c自学总结(二)---init/set/get方法
    objective-c自学总结(一)---面向对象
    水仙花数
    独木舟上的旅行
    阶乘之和
    小明的调查统计
    管闲事的小明
    重温《STL源码剖析》笔记 第一章
    重温《STL源码剖析》笔记 第三章
  • 原文地址:https://www.cnblogs.com/GoodRnne/p/10983391.html
Copyright © 2011-2022 走看看