牛客题霸 [在转动过的有序数组中寻找目标值] C++题解/答案
题目描述
给出一个转动过的有序数组,你事先不知道该数组转动了多少
(例如,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2).
在数组中搜索给出的目标值,如果能在数组中找到,返回它的索引,否则返回-1。
假设数组中不存在重复项。
题解:
如果全是有序的很好做,就是二分模板
但是现在存在翻转,也就是存在有序部分,也存在无序部分
我们只需要在二分模板中进行判断,如果左侧有序,判断目标值是在有序部分还是无序部分,右侧也是这样
详细看代码
代码:
class Solution {
public:/*** * @param A int整型一维数组 * @param n int A数组长度* @param target int整型 * @return int整型*/int search(int* A, int n, int target) {// write code hereif(n==0)return -1;int l=0;int r=n-1;while(l<=r){int mid=l+((r-l)>>1);if(A[mid]==target)return mid;if(A[l]<A[mid]&&A[l]<=target&&A[mid]>target)r=mid-1;else if(A[mid]<A[r]&&!(A[mid]<target&&A[r]>=target))r=mid-1;else l=mid+1;}return -1;}
};