程式設計之美 2 17 陣列移位迴圈

2021-07-30 21:15:39 字數 600 閱讀 7629

設計乙個演算法,把乙個含有n個元素的陣列迴圈右移k位,要求時間複雜度為o(n),且只允許使用兩個附加變數。

方法:將陣列a(含n個元素)右移k位,相當於把a分為兩部分,前(n-k)個元素a1和後k個元素a2,右移的過程是將兩部分交換位置,即原a=a1 a2,移位後為a'=a2 a1,a1,a2內部的元素順序是不變的。因此具體實現可通過以下步驟完成:先將a的元素全部逆序排列(a2的元素放到a1的前面,但a1,a2內部元素是逆序的,因此需要後面再次逆轉一次),再分別將前k個元素和後(n-k)個元素逆序排列。

注意:k<0,表示左轉|k|位,(若|k|    k>n, 相對於移動(k%n)位。

實現**如下:

#include using namespace std;

templatevoid reverse(vector&v, int start, int end)

return;

}templatevoid rightshiftknum(vector&v, int k)

int main(void)

; rightshiftknum(v, -11);

return 0;

}

程式設計之美2 17 陣列迴圈移位

string rightshift1 string s,int n,int k return s string rightshift2 string s,int n,int k return s 對於abcd1234,若迴圈右移4位得到的1234abcd,可以看出有兩部分是沒有變的一部分是abcd,...

程式設計之美2 17 陣列迴圈移位

題目描述 設計乙個演算法,把乙個含有n個元素的陣列迴圈右移k位,要求時間複雜度為o n 且只允許使用兩個附加變數,如abcd1234迴圈右移三位,則為 abcd11234 4abcd123 34abcd12 234abcd1 思路一 暴力解法,一步步來,每次迴圈移位一次,移k n次,此時複雜度為o ...

程式設計之美2 17 陣列迴圈移位

問題描述 設計乙個演算法,把乙個含有n元素的陣列迴圈左移或者右移k位。解決方法 1.暴力解法 o kn 2.顛倒位置 o n 具體思路和 1.暴力解法 o kn 思路 迴圈k次,每次移動一位 1 右移 2void s1 int a,int n,intk 3 12 a 0 t 13 14 1 左移 2...