題目:乙個陣列是由乙個遞減數列左移若干位形成的,比如是由克移兩位形成的,在這種陣列中查詢某乙個數。
思路:在此序列不斷二分的過程中,由於原序列是乙個遞減序列經過旋轉得到的,將它從任何位置分開,都會得到兩個序列,其中乙個是遞減序列,另乙個可以通過乙個遞減序列通過旋轉得到。這樣在不斷地二分查詢時,我們處理的序列子片段要麼就是乙個旋轉後遞減序列,要麼就是乙個純遞減序列,而無論是前者還是後者,在繼續分成兩個片段時,至少有乙個純遞減序列(可能兩個都是,如果之前的序列片段就是純遞減序列的話)。這樣我們可以保證能找到乙個片段是純遞減序列(if(data[i]>=data[j])),然後判斷我們要找的數是否在這個片段中(這是很直觀的,if(data[i]<=num&&num<=data[j])),如果在則繼續在此片段中查詢,否則說明在另乙個序列中,則遞迴在其中查詢
**:#includeusing namespace std;
int find(int * a,int num,int left,int right)
if(a[left]==num)
return left;
if(left>right)
return -1;
int mid=(left+right)/2;
if(a[mid]==num)
return mid;
if(a[mid]<=a[left])
else }
int main()
; cout<
遞減左旋數列中查詢乙個數
題目 乙個陣列是由乙個遞減數列左移若干位形成的,比如是由克移兩位形成的,在這種陣列中查詢某乙個數。思路 在此序列不斷二分的過程中,由於原序列是乙個遞減序列經過旋轉得到的,將它從任何位置分開,都會得到兩個序列,其中乙個是遞減序列,另乙個可以通過乙個遞減序列通過旋轉得到。這樣在不斷地二分查詢時,我們處理...
左移遞減數列查詢某乙個數
微軟 運算 乙個陣列是由乙個遞減數列左移若干位形成的,比如 是由左移兩位形成的,在這種陣列中 include include includeusing namespace std int findnumberinleftshiftsequence int a,int nlen,int expecte...
從海量資料中查詢乙個數
題目 給出40億個不重複的unsigned int的整數,沒排過序,再給乙個指定的數,判斷這個數是否在那40億個數 中 存在?方案一 申請512mb的記憶體,利用位圖,乙個bit代表乙個unsigned int的值,讀入這40億個數,設定相應的位,存在的設定為1,不存在的設定為0,然後我們只需要o ...