您的位置:首页 > 其它

【Leetcode】33. Search in Rotated Sorted Array

2016-04-19 14:57 375 查看
问题描述:

  二分查找,有序翻转后的数组上进行查找 ,返回下标。

问题分析:

  这题关键在于找到一个性质,就是如果这个数组确实被翻转过,那么 一定有a[0] > a
,所以根据这个条件来判断,当前l r 是否在单调区间上。

问题解决:

  首先判断target所在区间,然后判断m所在区间,最后先将l 或者 r 往target区间上靠, 然后把m往target上靠。

代码如下:

class Solution {
public:
int search(vector<int>& nums, int target) {
int l = 0, r = nums.size() - 1, m;
while(l <= r){
m = (l + r)>>1;
if(nums[m] == target)
return m;
if(nums[l] <= nums[r]){
if(nums[m] < target)
l = m + 1;
else
r = m - 1;
}else{
if(target >= nums[l]){//target在左侧区间
if(nums[m] < nums[r])//m在右侧区间
r = m - 1;//让m 左移
else{// m在左侧区间
if(nums[m] > target)
r = m - 1;
else
l = m + 1;
}
}
else{//target在右侧区间
if(nums[m] > nums[r])//m在左侧区间
l = m + 1;//让m 右移
else{//m在右侧区间
if(nums[m] > target)
r = m - 1;
else
l = m + 1;
}
}

}
}
return  -1;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: