陣列迴圈移位

2021-06-08 09:22:35 字數 572 閱讀 3906

問題描述:

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函式如下:

void reverse(char a, int start, int end)

}

2. 迴圈左移

迴圈左移與迴圈右移的不同之處為:

把序列分成前k個數和後(n-k)個數兩組分別進行逆轉操作,然後再整體逆轉即可。**如下:

void leftshift(char a, int n, int k)

陣列迴圈移位

陣列迴圈移位 對於存有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個元素的陣列迴圈右移k位,要求時間複雜度為o n 且只允許使用兩個附加變數。k可能大於n,但對k n就可。如下 reverse int arr,int b,int e for bint temp arr e arr e arr b arr b temp rightshif...