《程式設計珠璣》第二章-迴圈移位
問題:將一個n維向量向左迴圈移位m位。如向量0,1,2,3,4,5,6,7,8,9向左迴圈移位3位,結果是3,4,5,6,7,8,9,0,1,2。
方法1:每次迴圈移位1位,執行m次。輔助空間1,時間複雜度O(n*m)
方法2:用m維的輔助空間暫存前m個元素,對剩下的n-m個元素進行移位,最後將m個元素移動向量末尾。輔助空間m,時間複雜度O(n)。
方法3:(雜技方法)先a[0]-->temp,然後a[i]-->a[0],a[2i]-->a[i],直到遇到a[0],將temp-->剛才移動的最後一個位置。如
果沒有移動完則a[i]-->temp,然後a[1+i]-->a[1],a[1+2i]-->a[1+i],迴圈,直到全部移動。輔助空間O(1),時間複雜度O(n).
方法4:(求逆方法)利用了 (b,a)=(arbr)r,輔助空間1,時間複雜度O(n). 還可以擴充套件為(c,b,a)=(ar,br,cr)r噢~
方法5:(分塊方法)對於向量(a,b),其中a是m維的,b是n-m維,將b分成兩部分,b=(b1,b2),其中b2同a也是m維的,首先交換a和b2的位置。然後對(b2,b1)部分再迴圈進行上述操作。m>n-m時調換位置,繼續。輔助空間O(1),時間複雜度O(n).
效率:分塊>求逆>雜技
相關文章
- 程式設計珠璣,字字珠璣程式設計
- 程式設計珠璣:續(程式設計珠璣.Ⅱ修訂版)程式設計
- 程式設計珠璣程式設計
- 把《程式設計珠璣》讀薄程式設計
- 《程式設計珠璣》第2章三個問題程式設計
- 陣列迴圈移位陣列
- iOS面試珠璣iOS面試
- 《程式設計珠璣》第一章-點陣圖排序程式設計排序
- 《程式設計珠璣》程式碼之路15:節省空間的常見姿勢程式設計
- 一本書到底有幾個版本?——《程式設計珠璣》和《重構》程式設計
- [心得] Linux使用技巧珠璣Linux
- 《程式設計珠璣》程式碼之路11:最大子陣列和問題,花式七種解法程式設計陣列
- 迴圈結構程式設計程式設計
- 《程式設計珠璣》程式碼之路13:陣列如何線上性時間內實現多次區間修改程式設計陣列
- 怎樣用 Bash 程式設計:迴圈程式設計
- Linux Shell程式設計(16)——迴圈Linux程式設計
- 3.迴圈結構程式設計程式設計
- 《程式設計珠璣》程式碼之路14:兩個不會演算法也能把效率提升4倍的小套路程式設計演算法
- 《程式設計珠璣》程式碼之路12:如何用C/C++實現array[-1]並利用它寫出優美的程式碼程式設計C++
- Java語言程式設計—迴圈語句Java程式設計
- 04 shell程式設計之迴圈語句程式設計
- Linux Shell程式設計(18)—— 迴圈控制Linux程式設計
- 迴圈結構程式設計之習題程式設計
- C語言程式設計學習中while迴圈和do……while迴圈C語言程式設計While
- 微控制器C語言實現迴圈移位 (轉)C語言
- 非同步程式設計之事件迴圈機制非同步程式設計事件
- 迴圈結構程式設計 實驗題目程式設計
- Linux Shell程式設計(17)——巢狀迴圈Linux程式設計巢狀
- C#程式設計基礎第七課:C#中的基本迴圈語句:while迴圈、do-while迴圈、for迴圈、foreach迴圈的使用C#程式設計While
- 好程式設計師雲端計算教程分享Shell程式設計之for迴圈結構程式設計師
- 彙編實驗小記(五)-迴圈程式設計程式設計
- 12.程式程式設計基礎6:選擇和迴圈程式設計
- [譯] Flutter 非同步程式設計:Future、Isolate 和事件迴圈Flutter非同步程式設計事件
- 好程式設計師Java教程分享Java 迴圈結構程式設計師Java
- 好程式設計師Java培訓分享For迴圈詳解程式設計師Java
- 程式設計師打電話也能打出死迴圈?程式設計師
- 第二章 程式設計之道程式設計
- 如何理解Python的迴圈設計Python