Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
Find the minimum element.
You may assume no duplicate exists in the array.
/**
* Time complexity : O(N)
* Space complexity : O(1)
*/
class Solution {
public int findMin(int[] nums) {
if(nums == null || nums.length == 0) return 0;
int n = nums.length;
int i = 1;
while(i < n && nums[i-1] < nums[i]) {
i++;
}
if(i >= n) return nums[0];
return nums[i];
}
}
/**
* Time complexity : O(logN)
* Space complexity : O(1)
*/
class Solution {
public int findMin(int[] nums) {
if(nums == null || nums.length == 0) return -1;
if(nums.length == 1) return nums[0];
int left = 0, right = nums.length-1;
if(nums[left] < nums[right]) return nums[0];
while(left <= right) {
int mid = left+(right-left)/2;
if(nums[mid] > nums[mid+1]) return nums[mid+1];
if(nums[mid-1] > nums[mid]) return nums[mid];
if(nums[mid] > nums[0]) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
}
/**
* Time complexity : O(logN)
* Space complexity : O(1)
*/
class Solution {
public int findMin(int[] nums) {
if(nums == null || nums.length == 0) return 0;
int left = 0, right = nums.length-1;
while(left <= right) {
if(nums[left] <= nums[right]) {
return nums[left];
}
int mid = (left+right)/2;
if(nums[mid] >= nums[left]) {
left = mid+1;
} else {
right = mid;
}
}
return -1;
}
}