154. Find Minimum in Rotated Sorted Array II(Binary search)

Posted wz30

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了154. Find Minimum in Rotated Sorted Array II(Binary search)相关的知识,希望对你有一定的参考价值。

https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/description/ -- leetcode

follow up question: find the minimum element in a rotated array with duplicate elements

Idea: [3,3,1,3] compared to [3,4,1,2]  -> l = mid+1 --1

         [1,3,3] compared to [1,3,4] - > r = mid;  -- 2

         If we used the previous solution, it will complain with the above cases because one case is : nums[mid] > nums[r] l = mid+1; violating the 2nd case to update r ot l

         So here is the hadful problem.

         At first, I am trying to seperate this case with one conditon:  nums[mid] == nums[r] or..... However that is not general

         Totally, (nums[l] == nums[mid]) && (nums[r] == nums[mid]) {left++, right--} skip相同的元素。知道不同为止。

  Dealing with special case [1,1] or [1] -- determine the case of left and right.

         Idea is from the https://leetcode.com/problems/search-in-rotated-sorted-array-ii/description/ -- search in rotated array.

 

public int findMin(int[] nums) {
        int l  =0, r = nums.length-1;
        while(l<r){
            int mid = l+(r-l)/2;
            while((nums[l] == nums[mid]) && (nums[r] == nums[mid]) ) {
                ++l; --r;
                if(l>=nums.length || r<0) break;
            }
            if(l==r) return nums[l];
            else if(l>r) return nums[r+1];
            if(nums[mid] > nums[r]) l = mid+1;
            else r = mid;
        }
        return nums[l];
   }

follow up: find the minimum value index

 

Other thoughts for this problem: if(nums[mid] == nums[r]) h--; /./skip the current high one..

好难得二分查找。。。。

 to be continued... 

 

以上是关于154. Find Minimum in Rotated Sorted Array II(Binary search)的主要内容,如果未能解决你的问题,请参考以下文章