leetcode 154. Find Minimum in Rotated Sorted Array II
阿新 • • 發佈:2018-12-19
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.
Example 1:
Input: [1,3,5] Output: 1
Example 2:
Input: [2,2,2,0,1] Output: 0
二分查詢,考慮兩種特殊情況:
3,3,3,3,3,3,1,3,3 ,3
4,0,1,3,3 ,3 ,3,3,3,3
加粗為middle點,第一種情況,中間點等於左邊點,target必在left右邊,使left+1。第二種情況,確定與左邊不相連,target在middle左邊,使middle=right。
class Solution { public int findMin(int[] nums) { int l=0,r=nums.length-1; while(l<r){ int m=(l+r)/2; if(nums[l]==nums[m]&&l!=m){//排除起始相等,考慮邊界情況 l++; }else if(nums[m]>nums[r]){ l=m+1; }else if(nums[m]<nums[l]||nums[m]==nums[r]){ r=m; }else{ return nums[l]; } } return nums[l]; } }