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

2022-04-04 10:27:35 字數 557 閱讀 5332

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

法一:挨個遍歷,每個移動k位,複雜度

rightshift(int* arr,int n, int  k)

}

法二:可以進一步優化,因為k遠大於n時,存在重複移動,即移動存在週期性,週期就是n,所以移動k%=n就可以了

rightshift(int* arr,int n, int  k)

}

法三:分組逆序排序,具體過程分三步,以abcd1234移動4位為例子

逆序排列abcd:abcd1234   =>     dcba1234

逆序排列1234:dcba1234  =>      dcba4321

逆序排列dcba4321:  dcba4321     =>    1234abcd

reverse(int*  arr,  int  b,  int  e)

{ for(;b

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

設計乙個演算法,把乙個含有n個元素的陣列迴圈右移k位,要求時間複雜度為o n 且只允許使用兩個附件變數。比如abcd1234右移4位後為 1234abcd。法一 挨個遍歷,每個移動k位,複雜度 rightshift int arr,int n,int k 法二 可以進一步優化,因為k遠大於n時,存在...

程式設計之美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 ...