Search in Rotated Sorted Array 旋转数组查找
Search in Rotated Sorted Array 旋转数组查找
No.33 在没有重复数字的升序数组中查找值并返回下标
int search(vector<int>& nums, int target) {
int start=0;
int end=nums.size()-1;
while(start<=end) {
int mid=(start+end)>>1;
if (nums[mid]==target) return mid;
if (nums[mid]>=nums[start]) {
if (target<nums[mid] && target>=nums[start]) {
end=mid-1;
} else {
start=mid+1;
}
} else {
if (target>nums[mid] && target<=nums[end]) {
start=mid+1;
} else {
end=mid-1;
}
}
}
return -1;
}No.81 在有重复数字的升序数组中查找值并返回下标
bool search(vector<int>& nums, int target) {
int start=0;
int end=nums.size()-1;
while(start<=end) {
// 除去重复元素
while(start<end && nums[start]==nums[start+1]) ++start;
while(end>start && nums[end]==nums[end-1]) --end;
int mid=(start+end)>>1;
if (nums[mid]==target) return true;
if (nums[mid]>=nums[start]) {
if (target<nums[mid] && target>=nums[start])
end=mid-1;
else
start=mid+1;
} else {
if (target>nums[mid] && target<=nums[end])
start=mid+1;
else
end=mid-1;
}
}
return false;
}剑指Offer:查找最小的元素? 每次都往递增区间的反方向二分查找,直到前后下标相邻,后下标所指向的元素即为最小元素 特殊情况:前中后指向的元素都相等,无法进行二分的划分,因此这种情况只能进行线性搜索
#查找