思路太乱了,总是纠结于固有的方法,想用一种固定的套路得出想要的结果,还是得多变通多总结。
int lo=0,hi=nums.length-1;
// find the index of the smallest value using
binary search.
// Loop will terminate since mid < hi, and lo
or hi will shrink by at least 1.
// Proof by contradiction that mid < hi: if
mid==hi, then lo==hi and loop would have been terminated.
while(lo
int
mid=(lo+hi)/2;
if(nums[mid]>nums[hi]) lo=mid+1;
else
hi=mid;
}
// lo==hi is the index of the smallest value and
also the number of places rotated.
int rot=lo;
lo=0;hi=nums.length-1;
// The usual binary search and accounting for
rotation.
while(lo<=hi){
int
mid=(lo+hi)/2;
int
realmid=(mid+rot)%nums.length;
if(nums[realmid]==target)return realmid;
if(nums[realmid]
else
hi=mid-1;
}
return -1;
}
直接上码
旋转排列数组查找:
public int search(int[] nums, int target) {
形式变化和得善于从已知推未知。
同时注意栈插入的数据有很大的信息量,很大的信息量,很大的信息量不要漏用!