您的位置:首页 > 其它

81. Search in Rotated Sorted Array II

2017-09-13 19:25 211 查看
Problem:

Suppose an array sorted in ascending order 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).

Write a function to determine if a given target is in the array.

The array may contain duplicates.

这题是第33题是差不多的,但是多了一个条件,是允许数组内的数是重复的。这样的设定就会让33题的左右界判断出问题,上一题的判断肯定递增的条件是nums[start]<=nums[mid], 则在[start, mid]上元素是递增的。但是重复会使得=这个条件出现问题,例如[2,3,2,2]这样,所以要把条件划分成<,>和=三种情况。=的时候就把start元素移到下一位,避免判断两个相等的元素。

Code:(LeetCode运行6ms)

class Solution {
public:
bool search(vector<int>& nums, int target) {
int start = 0;
int end = nums.size();
while (start != end) {
int mid = (start + end - 1) / 2;
if (nums[mid] == target) {
return true;
}
if (nums[start] < nums[mid]) {
if (nums[start] <= target && target < nums[mid]) {
end = mid;
} else {
start = mid + 1;
}
} else if (nums[start] > nums[mid]) {
if (nums[mid] < target && target <= nums[end - 1]) {
start = mid + 1;
} else {
end = mid;
}
} else {
start++;
}
}
return false;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: