牛客题霸 [在转动过的有序数组中寻找目标值] C++题解/答案
生活随笔
收集整理的這篇文章主要介紹了
牛客题霸 [在转动过的有序数组中寻找目标值] C++题解/答案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
牛客題霸 [在轉動過的有序數組中尋找目標值] 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;} };總結
以上是生活随笔為你收集整理的牛客题霸 [在转动过的有序数组中寻找目标值] C++题解/答案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CM311-1A 卡刷 + 线刷、刷安卓
- 下一篇: 牛客题霸 [栈和排序] C++题解/答案