問題描述:
設計乙個演算法,把乙個含有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//左移
2void s3(int a, int n, intk)3
12 a[n-1] =t;13}
14 }
2. 顛倒位置------o(n)
思路:例如:1 2 3 4 5 6 7 8 右移2位
3 4 5 6 7 8 1 2
我們分解下: 先對換(0, n-k-1) :1 2 3 4 5 6 -> 6 5 4 3 2 1
再對換 (n-k, n-1):7 8 -> 8 7
-> 6 5 4 3 2 1 8 7
整體對換:7 8 1 2 3 4 5 6
**:
1//右移
2void reverse(int a, int l, intr)3
10}1112
void s2(int a, int n, int
k)13
1//左移
2void s4(int a, int n, intk)3
程式設計之美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位,要求時間複雜度為o n 且只允許使用兩個附加變數。方法 將陣列a 含n個元素 右移k位,相當於把a分為兩部分,前 n k 個元素a1和後k個元素a2,右移的過程是將兩部分交換位置,即原a a1 a2,移位後為a a2 a1,a1,a2內部的元素順...