您的位置:首页 > 其它

leetcode(33) - Search in Rotated Sorted Array

2016-11-21 23:59 447 查看
int find(int* nums, int start, int end, int target) {
if (start>end) return -1;
int mid=0;

while(start <= end){
mid=(start+end)/2;

if (nums[mid] < target){
start=mid+1;
} else {
if (nums[mid] > target){
end=mid-1;
} else {
return mid;
}
}
}

return -1;

}

int search(int* nums, int numsSize, int target) {
int start=0, end=numsSize-1;
int index=0; //翻转的临界点
int num1=-1, num2=-1;
int flag=0;
while(index+1 < numsSize){

if(nums[index] >= nums[index+1]){
flag=1;
break;
}
index++;
}
if(flag==0) index=0;
printf("%d", index);

if(target <= nums[index] && target >= nums[0]){
return find(nums, 0, index, target);
} else {

return find(nums, index+1, numsSize-1, target);

}
}


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
).

You are given a target value to search. If found in the array return its index, otherwise return -1.

本题是二分查找的变形题,主要就是找到翻转的那个临界点(下一个数值比它小)就可以了,然后看target的大小判断应该在哪个范围内进行二分查找。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: