設計乙個演算法,把乙個含有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 ...