您的位置:首页 > 其它

leetcode 81. Search in Rotated Sorted Array II

2016-04-24 21:13 323 查看
参考: https://yq.aliyun.com/articles/3888

题意

在有序的旋转数组中查找目标值(旋转有序指:一个数组被分割成两个有序的区间,且两区间能相连成一个有序的大区间。如45123)

题解

应为任意一个点分割的两个区间至少有一个是有序的,所以可以使用二分查找的方法解决。

注:由于有序数组中可能会有重复的数字,如113111,如果nums[mid] == nums[i],只要将i+1即可。

代码

class Solution {
public:
bool search(vector<int>& nums, int target) {
int i = 0, j = nums.size() - 1;

while(i <= j)
{
int mid = (i + j) / 2;
if(nums[mid] == target)
return true;
else if(nums[mid] > nums[i]) // 确定的有序区间在左边
{
if(nums[i] <= target && target <= nums[mid]) //若target在此有序区间中
j = mid;
else
i = mid + 1;
}
else if(nums[mid] < nums[i]) //确定的有序区间在右边
{
if(nums[mid] <= target && target <= nums[j])
i = mid;
else
j = mid - 1;
}
else
i++;

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