演算法題 查詢旋轉陣列的值

2021-08-07 04:48:45 字數 1076 閱讀 7803

在乙個排序的陣列中,如,經過旋轉後得到,當然也可以得到原陣列,在該旋轉後的陣列中查詢某個元素。

陷阱在於陣列不是嚴格遞增的

比如這樣有很多重複的元素的陣列時,當要查詢0時,在mid位置的元素為1,不能判斷怎麼縮小範圍

#include 

#include

#include

#include

#include

#include

using

namespace

std;

#define debug_

int find_rotate(vector

& vec,int left,int right,int value)

//首先考慮mid、left、right中有相同值的情況

//因為如果有相同值,無法判斷二分查詢的方向,且不好分類討論

if (vec[right] == vec[left])

if (vec[mid] == vec[left])

if (vec[mid] == vec[right])

//此時mid、left、right都不相同

if (vec[mid]>vec[left]&&vec[mid]>vec[right] )

else

}else}}

if (vec[left]==value)

return left;

else

if (vec[right] == value)

return right;

else

return -1;

}int main()

; vector

vec_2;

vector

vec_3;

cout

<< find_rotate(vec, 0, vec.size() - 1, 2)<< find_rotate(vec_2, 0, vec_2.size() - 1, 2)<< find_rotate(vec_3, 0, vec_3.size() - 1, 0)0;}

演算法題 旋轉陣列

題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個排序的陣列的乙個旋轉 遞增或遞減的 輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個排序的陣列的乙個旋轉 遞增或遞減的 輸出旋轉...

旋轉陣列查詢指定值

遞增陣列 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個值。同時記錄使得值最小的陣列最短的那一組。如圖 通過求取求和值最接近的一組資料可以找...