美文网首页
leetcode--153--寻找旋转排序数组中的最小值

leetcode--153--寻找旋转排序数组中的最小值

作者: minningl | 来源:发表于2020-07-18 01:18 被阅读0次

    题目:
    假设按照升序排序的数组在预先未知的某个点上进行了旋转。

    ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

    请找出其中最小的元素。

    你可以假设数组中不存在重复元素。

    示例 1:

    输入: [3,4,5,1,2]
    输出: 1
    

    示例 2:

    输入: [4,5,6,7,0,1,2]
    输出: 0
    

    链接:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array

    思路:
    1、二分查找,设置好边界条件向中间逼近,直至找到最小的节点
    2、需要注意的边界条件:
    a)循环的边界条件,为什么不是left<=right? 如果相等,则假如此时left、right已经走到最小值对应位置,则此时继续往下循环的话,会进入else条件中,使得left+1,跳到非最小值索引的位置
    b)为什么right=mid?而不是mid-1。因为此时mid在右侧递增的序列,假如此时mid在最小的位置,则mid-1的话就会走向左侧的序列中

    Python代码:

    class Solution(object):
        def findMin(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
    
            left = 0
            right = len(nums)-1
    
            while left<right:
                # 为什么循环条件里没有等号?
                mid = (left+right)/2
                if nums[mid]<nums[right]:
                    right = mid  
                    # 为什么不等于mid-1? 
                else:
                    left = mid+1
            return nums[left]
                    
    

    C++代码:

    class Solution {
    public:
        int findMin(vector<int>& nums) {
            int left=0;
            int right=nums.size()-1;
    
            while (left<right){
                int mid=(left+right)/2;
                if(nums[mid]<nums[right]){
                    right = mid;
                }else{
                    left = mid+1;
                }
            }
            return nums[left];
        }
    };
    

    Java代码:

    class Solution {
        public int findMin(int[] nums) {
            if (nums.length==1){
                return nums[0];
            }
            int left=0;
            int right=nums.length-1;
    
            while (left<right){
                int mid = (left+right)/2;
                if (nums[mid]>nums[right]){
                    left = mid+1;
                }else{
                    right = mid;
                }
            }
            return nums[right];
        }
    }
    

    相关文章

      网友评论

          本文标题:leetcode--153--寻找旋转排序数组中的最小值

          本文链接:https://www.haomeiwen.com/subject/xstahktx.html