原题链接在这里:https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/
是Find Minimum in Rotated Sorted Array的扩展, 这里有duplicates.
时间复杂度出现了变化,原来可以根据nums[l] 和 nums[r]的大小关系比较,判断下一步是左面查找还是右面查找,现在若是nums[l] == nums[mid]时无法判断。
e.g. [10,1,10,10,10]. nums[l] == nums[mid]. Worst case is all nums are equal, 此时 l 每次右移一位。Time O(n), Space O(1).
AC Java:
1 public class Solution { 2 public int findMin(int[] nums) { 3 4 if(nums == null || nums.length == 0){ 5 return Integer.MAX_VALUE; 6 } 7 int l = 0; 8 int r = nums.length -1; 9 int res = nums[0]; 10 while(l < r-1){ 11 int mid = l + (r-l)/2; 12 if(nums[l] < nums[mid]){ 13 res = Math.min(res, nums[l]); 14 l = mid+1; 15 }else if(nums[l] > nums[mid]){ 16 res = Math.min(res, nums[mid]); 17 r = mid-1; 18 }else{ 19 l++; 20 } 21 } 22 res = Math.min(res, nums[l]); 23 res = Math.min(res, nums[r]); 24 return res; 25 } 26 }
LeetCode Find Minimum in Rotated Sorted Array II
原文:http://www.cnblogs.com/Dylan-Java-NYC/p/4855293.html