在一个有序的旋转数组中,查找给定值
程序员文章站
2022-05-18 17:16:50
...
思路一:
因为数组有序,经过旋转后,数组保持局部有序。因此可以用二分查找。
bool search(int A[], int n, int target) {
int start=0;
int end=n-1;
while(start<=end){
int mid=(start+end)>>1;
if(target==A[mid])
return true;
if(A[mid]==A[start]&&A[mid]==A[end]){ //此时给定值可能在左边,也可能在右边。因此要遍历整个数组。 或者++start,--last.
/*
for(int i=0;i<n;i++){
if(target==A[i])
return true;
}
return false;*/
start++;
end--;
}else if(A[start]<=A[mid]){ //左边有序
if(target<A[mid]&&target>=A[start])
end=mid-1;
else
start=mid+1;
}else if(A[mid]<=A[end]){ //右边有序
if(target>A[mid]&&target<=A[end])
start=mid+1;
else
end=mid-1;
}
}
return false;
}
推荐阅读
-
C++实现LeetCode(34.在有序数组中查找元素的第一个和最后一个位置)
-
一个数组nums,其中任意两个值等于给定值target,返回这两个值在nums里的位置
-
LeetCode 1 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
-
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素
-
两数之和:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。...
-
c语言和Java语言实现,两数之和:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
[每日一题]给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。
-
算法(C++):给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数
-
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标,假设每种输入只会对应一个答案