您的位置:首页 > 其它

Leetcode 153: Find Minimum in Rotated Sorted Array

2015-12-15 07:43 423 查看
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.

You may assume no duplicate exists in the array.

Solution:

The minimum element is at the pivot, which separates the array into two parts. We can use binary search to find it. If the middle element is greater than the end element, mid is in the first part of the array, so set the start mid. If mid element is less than
the end, mid is in the second part of the array and thus we should set end mid. The reason why we choose to compare mid element with end element instead of the start is, a sorted array is also regarded as a rotated array. So if we choose to compare mid with
start, the element is always greater than the start, and start is always go forward until it equals end. So in this way the result is not correct.

Time complexity: O(logn)

Space complexity: O(n)

public class Solution {
public int findMin(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int start = 0;
int end = nums.length - 1;
int mid;
// Binary Search
while (start + 1 < end) {
mid = start + (end - start) / 2;
if (nums[mid] >= nums[end]) {
start = mid;
} else {
end = mid;
}
}
if (nums[start] <= nums[end]) {
return nums[start];
} else {
return nums[end];
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Binary Search Array