###Info 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.
Subscribe to see which companies asked this question
solution:
小试牛刀
public class Solution {
public int findMin(int[] nums) {
return findBetween(nums,0,nums.length-1);
}
public int findBetween(int[] nums, int si, int ei){
if(si==ei)return nums[si];
if(si+1==ei)return nums[si]<nums[ei]?nums[si]:nums[ei];
int mid = (ei + si) /2 ;
if(nums[mid]<nums[ei]&&nums[mid]<nums[si]){
if(nums[mid]<nums[mid-1])return nums[mid];
return findBetween(nums,si,mid-1);
}
if(nums[mid]>nums[ei]&&nums[mid]>nums[si]){
if(nums[mid]>nums[mid+1])return nums[mid+1];
return findBetween(nums,mid+1,ei);
}
return nums[si];
}
}
点评
- 边界条件
- 特殊情况