陣列右移k位的2種演算法

2021-10-09 15:33:45 字數 577 閱讀 7890

利用額外的空間b[n]來直接定位到指定的位置,不需要考慮元素覆蓋的問題,這是它快的原因

由於是迴圈右移,必然要%來迴圈,

核心**:b[(i + k) % n] = a[i];

void

move_it()

else

for(

int i =

0; i < n; i++

)for

(int i =

0; i < n; i ++)}

delete

a;delete

b;}

思路先把儲存第乙個元素,末尾元素放到第乙個位置,再把元素從左往右挪,每次移動1位

按這樣的思路,做k次就能移動k位

void

move_it()

else

while

(k--

) a[1]

= begin;

}for

(int i =

0; i < n; i++)}

delete

a;}

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

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

陣列 如何把乙個陣列迴圈右移K位

假設要把陣列12345678右移2位,變為78123456。比較移位前後陣列序列的形式,不難看出,其中有兩段序列的順序是不變的,即就是 78 和 123456,可以把這兩段看做兩個整體,右移k位就是把陣列的兩部分交換一下。時間複雜度為o n 步驟 1 逆序陣列子串行123456,陣列序列的形式為65...

資料結構和演算法之陣列右移K

基本思路 不開闢新的陣列空間的情況下考慮在原屬組上進行操作 將陣列倒置,這樣後k個元素就跑到了陣列的前面,然後反轉一下即可 同理後 len k個元素只需要翻轉就完成陣列的k次移動 public class arraykshift k k array.length if 0 k reverse arr...