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

2022-08-30 10:39:13 字數 851 閱讀 8693

問題描述:

設計乙個演算法,把乙個含有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內部的元素順...