Problem
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.
You may assume no duplicate exists in the array.
Example 1:
Input: [3,4,5,1,2]
Output: 1
Example 2:
Input: [4,5,6,7,0,1,2]
Output: 0
Solution (Java)
class Solution {
private int findMinUtil(int[] nums, int l, int r) {
if (l == r) {
return nums[l];
}
int mid = (l + r) / 2;
if (mid == l && nums[mid] < nums[r]) {
return nums[l];
}
if (mid - 1 >= 0 && nums[mid - 1] > nums[mid]) {
return nums[mid];
}
if (nums[mid] < nums[l]) {
return findMinUtil(nums, l, mid - 1);
} else if (nums[mid] > nums[r]) {
return findMinUtil(nums, mid + 1, r);
}
return findMinUtil(nums, l, mid - 1);
}
public int findMin(int[] nums) {
int l = 0;
int r = nums.length - 1;
return findMinUtil(nums, l, r);
}
}
Solution (Javascript)
/**
* @param {number[]} nums
* @return {number}
*/
var findMin = function(nums) {
var left = 0;
var right = nums.length - 1;
var mid = 0;
while (left < right) {
mid = Math.floor((left + right) / 2);
if (nums[mid - 1] > nums[mid]) return nums[mid];
if (nums[mid] < nums[left] || nums[mid] < nums[right]) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return nums[left];
};
Explain:
nope.
Complexity:
- Time complexity : O(log(n)).
- Space complexity : O(1).