利用額外的空間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...