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

2021-08-04 23:49:33 字數 501 閱讀 4783

要求:時間複雜度為o(n)

思路:

將乙個字串分成兩部分,x 和y 兩個部分,在字串上定義反轉的操作x^t,即把x 的所有字元反轉(如,x=」abc」,那麼x^t=」cba」),那麼我們可以得到下面的結論:

(x^ty^t)^t=yx。顯然我們這就可以轉化為字串的反轉的問題了。

就拿abcdef 這個例子來說,若要讓def 翻轉到abc 的前頭,那

麼只要按下述3 個步驟操作即可:

1、首先分為倆部分,x:abc,y:def;

2、x->x^t,abc->cba, y->y^t,def->fed。

3、(x^ty^t)^t=yx,cbafed->defabc,即整個翻轉。

void reverse(char*start, char*end)

}void *left(char *s, int

pos) //pos 為要旋轉的字元個數,或長度

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

假設原陣列序列為abcd1234,要求變換成的陣列序列為1234abcd,即迴圈右移了4位 比較之後,不難看出,其中有兩段的順序是不變的 1234和abcd 可把兩段看成兩個整體。右移k位的過程就是把陣列的兩部分交換一下。變換過程通過以下步驟完成 1.逆序排列 abcd abcd1234 dcba1...

資料結構學習 將陣列的元素迴圈右移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個字元,英文算半個字元

將字串截短,取前n個字元,英文算半個字元。param orignalstring 原字串 param length 長度 param chopedstring 超過部分的表示字串 return 擷取的字串 publicstaticstring chop string orignalstring,in...