Follow up for "Find Minimum in Rotated Sorted Array":Suppose a sorted array is rotated at some pivot unknown to you beforehand.
What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
(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.
---
Solution: I just copied and pasted my answer from http://choksheak.blogspot.com/2015/08/find-minimum-in-rotated-sorted-array.html and it got accepted right away.
public class Solution {
public int findMin(int[] nums) {
return findMin(nums, 0, nums.length - 1);
}
private int findMin(int[] nums, int lo, int hi) {
if (lo >= hi) return nums[hi];
// If sub-array is sorted, return the first number.
boolean isSorted = (nums[lo] < nums[hi]);
if (isSorted) return nums[lo];
// If sub-array is not sorted, then need to search in both halves.
int mid = lo + (hi - lo) / 2;
return Math.min(findMin(nums, lo, mid), findMin(nums, mid + 1, hi));
}
}
No comments:
Post a Comment