CI9 3 旋轉陣列查詢給定值

2021-06-16 14:40:39 字數 711 閱讀 7938

給定乙個旋轉了任意次的有序陣列a和乙個數n,實現乙個o(logn)的演算法返回n在a中的下標,若沒有返回-1。(假定原有序陣列是遞增的)

例子:輸入:a:15,16,19,20,25,1,3,4,5,7,10,14;n:5

輸出:8

思路:有序陣列旋轉之後,前半部分仍是有序的,後半部分無序,仍然可以用二分的思想。

如果a[mid] == n,結束。

如果a[mid] > n,有兩種情況:

1、如果a[mid] > a[left],說明前半段有序:

那麼如果a[left] > n則n在後半段,否則在前半段;

2、如果a[mid] < a[left],說明後半段有序:那麼n在前半段。

如果a[mid] < n,情況類似。

該思路只適合沒有重複數字的情況,如果有重複數字只有順序查詢了。

#include #include using namespace std;

int search(const vector& v, int a)

else

r = m - 1;

} else if (a > v[m])

}} return -1;

}int main()

cin >> n;

cout << search(v, n) << endl;

return 0;

}

旋轉陣列查詢指定值

遞增陣列 1,2,3,4,5 變化為 5,6,1,2,3,4 給定k,判斷是否存在,並返回其索引位置 二分查詢 選擇中間位置作為判斷的分界點 所以二分中,必定有一部分陣列是遞增有序的,而另一部分則不是,所以當我們取中間點的時候,首先判斷中間點是不是所要尋找的值。如果不是,則尋找遞增的那一部分陣列 1...

查詢旋轉陣列最小值

求對於長度為n的陣列a,求子陣列的和接近0的子陣列。例如 定義n長度的空間sum 0 n 1 sum i 是a的前i項和。並且有sum i 1 sum i a i 1 首先對sum i 進行排序,找到求和最接近的2個值。同時記錄使得值最小的陣列最短的那一組。如圖 通過求取求和值最接近的一組資料可以找...

在乙個有序的旋轉陣列中,查詢給定值

題目描述 有乙個排過序的陣列,包含n個整數,但是這個陣列向左進行了一定長度的移位,例如,原陣列為 1,2,3,4,5,6 向左移位5個位置即變成了 6,1,2,3,4,5 現在對於移位後的陣列,需要查詢某個元素的位置def find nums,target low,high 0,len nums 1...