將N個字元的陣列,迴圈右移K位。時間複雜度O N

2021-08-05 18:47:41 字數 646 閱讀 8802

假設原陣列序列為abcd1234,要求變換成的陣列序列為1234abcd,即迴圈右移了4位

比較之後,不難看出,其中有兩段的順序是不變的:1234和abcd

可把兩段看成兩個整體。右移k位的過程就是把陣列的兩部分交換一下。變換過程通過以下步驟完成:

1.逆序排列 abcd: abcd1234 -> dcba1234;

2.逆序排列 1234: dcba1234-> dcba4321;

3.全部逆序 dcba4321->1234abcd。

將N個字元的陣列,迴圈右移K位。

要求 時間複雜度為o n 思路 將乙個字串分成兩部分,x 和y 兩個部分,在字串上定義反轉的操作x t,即把x 的所有字元反轉 如,x abc 那麼x t cba 那麼我們可以得到下面的結論 x ty t t yx。顯然我們這就可以轉化為字串的反轉的問題了。就拿abcdef 這個例子來說,若要讓de...

資料結構學習 將陣列的元素迴圈右移k位

晚上完成演算法實現。待續 題目 設計乙個演算法,將陣列a 0.n 1 中的元素迴圈右移k位,假設原陣列序列為a0,a1,an 2,an 1,移動後為an k,an k 1,a0,a1,an k 1。要求 只用乙個元素大小的附加儲存 元素移動或交換次數與n線性相關。例 n 10,k 3 原始陣列 0,...

長度為n的整數陣列迴圈左移右移m位

長度為n的整數陣列迴圈左移m位 右移m相當於左移n m include stdafx.h include void moveleft int a,int n,int m int tmain int argc,tchar argv int p int out 9 moveleft old,9,6 fo...