小公尺筆試題 右移k位陣列元素查詢

2021-07-11 23:12:16 字數 1016 閱讀 5165

問題描述:

乙個遞增陣列a如a[10]=向右移k位後變為陣列,但是不知道向右移動幾位.

如果輸入元素2,返回5;

如果輸入元素8,返回1;

要求:時間複雜度小於o(n),空間複雜度為o(1).

問題分析:

(1)尋找前段遞增陣列末元素和後段遞增陣列的首元素位置;

(2)定位查詢元素的位置,利用二分查詢返回其下標.

**實現:

#include #include using namespace std;

//利用二分查詢對陣列前段或後段查詢

int binarysearch(int a,int x,int left,int right)

} return -1;

}int k_search(int a,int n,int x)

int middle=(_left+_right)/2;

if(a[middle] >= a[_right]) //確定前段遞增陣列末元素位置

else if(a[middle] <= a[_left]) //確定後段遞增首元素位置

}} //查詢元素x大於或等於整個陣列首元素,在前段遞增陣列查詢元素

if(x >= a[left])

//查詢元素x小於整個陣列首元素,在後段遞增陣列查詢元素

else

return pos;

}int main()

; int m=sizeof(a)/sizeof(a[0]);

int p=k_search(a,m,x);

cout<

執行結果:

陣列的迴圈右移問題(好未來筆試題)

問題描述 給定乙個整數陣列,長度為n,現在要求該陣列迴圈右以m個元素。例如,陣列為 1,2,3,4,5,6,7,8,9 迴圈右移3個元素後為變成 7,8,9,1,2,3,4,5,6 解法一 輔助空間法,思路很簡單,就是另外開闢一塊和原來陣列一樣大小的空間。然後先把原來陣列的最後面的m個元素複製到 新...

中興筆試題 兩有序陣列的中位數求解

題目 設x 1.n 和y 1.n 為兩個陣列,每個都包含n個已排好序的數。給出乙個求陣列x和y中所有2n個元素的中位數的 o lgn 時間的演算法。首先假設中位數等於m,在陣列x中。假設x k m,於是x中就有k個元素小於等於m,n k個元素大於等於m。我們知道如果兩個陣列合併起來,必然有n個元素小...

資料結構學習 將陣列的元素迴圈右移k位

晚上完成演算法實現。待續 題目 設計乙個演算法,將陣列a 0.n 1 中的元素迴圈右移k位,假設原陣列序列為a0,a1,an 2,an 1,移動後為an k,an k 1,a0,a1,an k 1。要求 只用乙個元素大小的附加儲存 元素移動或交換次數與n線性相關。例 n 10,k 3 原始陣列 0,...