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...

原文地址:https://www.cnblogs.com/stiles/p/154B.html

时间: 2024-08-28 04:45:52

154. Find Minimum in Rotated Sorted Array II(Binary search)的相关文章

Java for LeetCode 154 Find Minimum in Rotated Sorted Array II

Suppose a sorted array 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. The array may contain duplicates. 解题思路: 参考Java for LeetCode 081 Search in Rotated Sorted Array II J

[LeetCode] 154. Find Minimum in Rotated Sorted Array II 寻找旋转有序数组的最小值 II

Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed? Would this affect the run-time complexity? How and why? Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might be

Leetcode[154]-Find Minimum in Rotated Sorted Array II

Link: https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/ Follow up for "Find Minimum in Rotated Sorted Array": What if duplicates are allowed? Would this affect the run-time complexity? How and why? Suppose a sorted array is

[leedcode 154] Find Minimum in Rotated Sorted Array II

Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed? Would this affect the run-time complexity? How and why? Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might be

leetcode 154. Find Minimum in Rotated Sorted Array II --------- java

Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed? Would this affect the run-time complexity? How and why? Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might be

LeetCode OJ 154. Find Minimum in Rotated Sorted Array II

Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed? Would this affect the run-time complexity? How and why? Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might be

154. Find Minimum in Rotated Sorted Array II (Array; Divide-and-Conquer)

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. The array may contain duplicates. 思路:有重复元素的时候,不能按I中这么分三类(反例:Input: [3,3,1,3]=>将

154. Find Minimum in Rotated Sorted Array II

就比1多了一点点 1 public int findMin(int[] nums) { 2 if(nums.length == 0) { 3 return -1; 4 } 5 int left = 0; 6 int right = nums.length - 1; 7 while(left < right) { 8 int mid = left + (right - left) / 2; 9 if(nums[mid] > nums[right]) { 10 left = mid + 1; 11

LeetCode 153, 154. Find Minimum in Rotated Sorted Array I &amp; II

153. Find Minimum in Rotated Sorted Array 二分题目,由于rotated存在,a[mid]<key不能判断在哪一边搜索. 可以根据a[low]与a[high]的关系,来判断哪一边有序,哪一边存在rotate,进而缩小搜索区间. 开区间写法:(由于搜索区间和解区间都是[low, high],直接 [low, high]) class Solution { public: int findMin(vector<int>& nums) { int