演算法題 字串向左或向右迴圈移動

2021-06-09 19:27:44 字數 789 閱讀 1469

問題描述:將乙個具有n個元素的字串向左迴圈移動i個位置。例如,假設n=8,i=3,那麼字串abcdefgh移動之後變成defghabc.

對於整數陣列1,2,3,4,5,6,7,8,9,10迴圈向左移動5位的結果為6 7 8 9 10 1 2 3 4 5.

條件: 時間複雜度o(n), 空間複雜度o( 1 ).

人們可能想到的解法:

一:先將陣列或字串中的前i個元素複製到乙個臨時陣列中,接著將餘下的n-i個元素左移i個位置,然後再將前i個元素從臨時數

組中複製到陣列中後面的位置。這個方案使用了i個額外的位置,浪費了空間。

二:定義乙個函式來將x向左旋轉乙個位置,然後呼叫該函式i次,但是這種方法太浪費時間。時間與n成比例

最簡單和最有效的方法如下(分塊旋轉和整體旋轉):

將乙個具有10個元素的陣列(1 2 3 4 5 6 7 8 9 10)想左迴圈移動5個位置,採用搖手的方法:

先是掌心對著自己,左手在右手的上面,如下圖所示:

實現**如下:

#includevoid  reverse(int a,int start,int end ) //轉陣列a中start到end之間的元素

}void show(int a,int len)

水題(字串的移動)

時間限制 1000 ms 記憶體限制 65535 kb 難度 1描述 小c才開始學習c語言,讓他最煩惱的就是對字元陣列的操作。小c的好朋友小e為了激勵他,出了這樣乙個題目 字串的移動輸出。並給他許諾說,如果他能夠在有限的時間內編寫出這道題目的 並順利通過就請他去吃大餐,於是小c便認真的敲這個題目的 ...

演算法題 字串旋轉

對於乙個字串,和字串中的某一位置,請設計乙個演算法,將包括i位置在內的左側部分移動到右邊,將右側部分移動到左邊。給定字串a和它的長度n以及特定位置p,請返回旋轉後的結果。測試樣例 abcdefgh 8,4 返回 fghabcde 正常解法 1.用 按特定位置訪問逐字元拷貝 class stringr...

演算法題 字串解碼

1,給定乙個字串,目標是將寫在 和 之間的字串,重複 號前面的數字次數 數字只會是個位數 2,例如 輸入結果 strs he3 llo world 輸出結果 res hellollolloworld 輸入結果 strs he3 ll2 o wo rld 輸出結果 res helloowolloowo...