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

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

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

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

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

    请找出其中最小的元素。

    注意数组中可能存在重复的元素。

    示例 1:

    输入: [1,3,5]
    输出: 1
    示例 2:

    输入: [2,2,2,0,1]
    输出: 0

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

    思路:
    1、注意思路和上一题154题类似,注意区别在于数组中可能有重复的情况
    2、需要考虑mid位置的值和right位置的相同的情况,此时将right---即可,避免跳出mid最小位置的情况

    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
                elif nums[mid]>nums[right]:
                    left = mid+1
                else:
                    right -= 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 if (nums[mid]>nums[right]){
                    left = mid+1;
                }else{
                    right -= 1;
                }
            }
            return nums[left];
        }
    };
    

    Java代码:

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

    相关文章

      网友评论

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

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