https://leetcode.com/problems/search-in-rotated-sorted-array-ii/
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e.,
[0,0,1,2,2,5,6]might become[2,5,6,0,0,1,2]).You are given a target value to search. If found in the array return
true, otherwise returnfalse.Example 1:
Input: nums = [2,5,6,0,0,1,2], target = 0 Output: trueExample 2:
Input: nums = [2,5,6,0,0,1,2], target = 3 Output: falseFollow up:
- This is a follow up problem to Search in Rotated Sorted Array, where
numsmay contain duplicates.- Would this affect the run-time complexity? How and why?
增加了重复元素,导致对边界条件的判断变得复杂了很多,我原本在 33. Search in Rotated Sorted Array 中使用的方法就显得太过粗糙了,导致我花了很长时间都想不明白。
所以参考了这篇博客:https://blog.youkuaiyun.com/linhuanmars/article/details/20588511
他对原理解释的非常清楚,而且以他的思路理解的话就可以相对更自然的推广到这道题的情况下使用
class Solution {
public:
bool search(vector<int>& nums, int target) {
int lo = 0;
int hi = nums.size()-1;
int mid;
while(lo <= hi){
mid = (lo+hi)/2;
if(nums[mid] == target){
return true;
}else if(nums[mid] < nums[hi]){ //右侧有序
if(target > nums[mid] && target <= nums[hi]){
lo = mid + 1;
}else{
hi = mid - 1;
}
}else if(nums[mid] > nums[hi]){ //左侧有序
if(target < nums[mid] && target >= nums[lo]){
hi = mid - 1;
}else{
lo = mid + 1;
}
}else{
--hi;
}
}
return false;
}
};

本文针对LeetCode上的一道难题——在旋转排序数组中查找目标值,提供了详细的解决方案。通过引入一篇高质量的参考博客,深入解析了算法原理,并针对含有重复元素的情况进行了特别处理,使得算法在复杂条件下仍能高效运行。
472

被折叠的 条评论
为什么被折叠?



