問題描述:
乙個遞增陣列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,...