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;
}
};
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;
}
};
相关文章推荐
- 33. Search in Rotated Sorted Array && 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- leetcode 81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- Leetcode 81. Search in Rotated Sorted Array II (Medium) (cpp)
- [leetcode 81] Search in Rotated Sorted Array II
- [LeetCode]81 Search in Rotated Sorted Array II
- [LeetCode]81 Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II**
- 81. Search in Rotated Sorted Array II (Array; Divide-and-Conquer)
- leetcode 81. Search in Rotated Sorted Array II-旋转数组|二分查找
- LeetCode OJ 81 Search in Rotated Sorted Array II
- leetcode 81:Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- leetcode_middle_86_81. Search in Rotated Sorted Array II
- 81. Search in Rotated Sorted Array II
- leetcode 81. Search in Rotated Sorted Array II
- 【Leetcode】81. Search in Rotated Sorted Array II
- LeetCode - 81. Search in Rotated Sorted Array II
- Leetcode 81. Search in Rotated Sorted Array II