陣列迴圈移位

2021-09-26 21:33:45 字數 1114 閱讀 3356

詳解**

設計演算法將陣列a[n]迴圈右移k位,並要求時間複雜度o(n),只能用乙個元素的輔助空間,輸出的參考如下。

1 2 3 4 5 6 7 8 9 10

34 5 6 7 8 9 10 1 2 3

迴圈移動前:

1 2 3 4 5 6 7 8 9 10

迴圈移動多少位(0-10):

3迴圈移動後:

4 5 6 7 8 9 10 1 2 3

要求複雜度是o(n)且只能用乙個元素的輔助空間,多個for不鑲嵌的話還是o(n)

參考了網上大佬的思路,如下:

如果說迴圈移動3位,可以將a[0]~a[n-1]分成兩部分

1 2 3 和 4 5 6 7 8 9 10

然後對兩部分分別進行倒置

3 2 1 和 10 9 8 7 6 5 4

合併起來即為

3 2 1 10 9 8 7 6 5 4

再對最後的陣列進行倒置

4 5 6 7 8 9 10 1 2 3

該**中還運用了其他的函式~

//在這道題中,a陣列已定,可自行修改~

#include

using namespace std;

void

rreverse

(int a,

int x,

int y)

}void

rrotate

(int a,

int k)

intmain()

; cout<<

"迴圈移動前:"

0;i<

10;i++

) cout<<<

" ";

cout

"迴圈移動多少位(0-10):"

>k;

rrotate

(a,k);

cout<<

"迴圈移動後:"

0;i<

10;i++

) cout<<<

" ";

cout

}

如果還有簡便的方法,歡迎大佬指教~

陣列迴圈移位

陣列迴圈移位 對於存有n個整數的陣列,將其向左迴圈移動k個位置,x0,x1,xn 1 變換為 xk,xk 1,xn 1,x0,x1,xk 1 最直接的方法就是每次將首位的數放到乙個臨時的整型變數中,後面n 1個數一次左移,這樣需要k次才能完成,而每次的複雜度是o n 因此總共其複雜度是o k n 一...

陣列迴圈移位

題目 設計乙個演算法,把乙個含有n個元素的陣列迴圈右移k位,要求複雜度為o n 且只允許使用兩個變數 思考問題 1 考慮原始解法 直接迴圈移動陣列k次,則演算法複雜度為0 n k 使用額外兩個變數完成,顯然複雜度依賴於k的值,如果k n,則演算法複雜度大於或等於o n 2 2 考慮改進 原始演算法複...

陣列迴圈移位

問題描述 n個元素儲存於陣列a 0.n 1 中,求向右或向左迴圈移位 k k 0 位得到的新陣列a。1.迴圈右移 步驟 1 k k n 2 把序列分成前 n k 個數和後k個數兩組分別進行逆轉操作,如下圖 如下 void rightshift char a,int n,int k 其中reverse...