题目分析:
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.
一个经过旋转过后的有序数组,找出最小值。
(旋转方式见上,也就是把一个有序数组的两块交换一下位置,注意有可能交换的其中一块为空,也就是数组不变 )
1.最简单的遍历,不说了。时间复杂度O(n)
2.二分查找(因为在数组子块内部还是有序的,利用这点) 。时间复杂度O(log n)
代码:
public class Solution {
public int findMin(int[] nums) {
if(nums.length<=2){
if(nums.length ==1 || nums[0]<nums[1]){
return nums[0];
}else{
return nums[1];
}
}
int head = 0,tail = nums.length-1,mid = (head+tail)/2;
while(nums[mid-1]<nums[mid]){
if(nums[mid]<nums[tail]){
tail = mid;
}else{
head=mid;
}
if(tail-1 ==head){
return nums[tail]>nums[head]?nums[head]:nums[tail];
}
mid = (head+tail)/2;
}
return nums[mid];
}
}
贴上结果:
Ps:速度不快~以后有时间重刷再改进吧