我一直在嘗試this關於spoj的問題,無法拿出正確的方法。 解決問題的正確算法是什麼?使陣列排序的最小操作次數
6
A
回答
8
您應該找到最長的連續增加的子序列,可以在O(n log n)中完成(通過排序數組),之後,需要的更改數量爲N - longest consecutive increasing subsequence
。請注意,通過連續我的意思是排序數組中的順序。
例如:
1 7 6 2 5 4 3 => 1-2-3最長連續遞增子, 數目的所需移動是4
1 6 4 3 5 2 7 => 1-2或4-5或6-7是最長連續增加 子序列,請注意,1-4-5-7是最長遞增子但 數目的移動需要的是5不3.
爲什麼這個作品:
最佳算法不改變一些的物品的地方,最大的叫無序列變化X
,你不會更改的操作過程中相互關聯的X
項目的位置,所以他們應該在增長方式進行排序。但是因爲你只是允許移動陣列中的第一個或最後一個物品,所以你不能在X
項目之間放置任何物品(注意,我們假設X
是操作期間最大的不變的子序列),所以X
之間應該沒有差距項目。所以它們應該按排序格式排序和連續。
所以需要的變化次數不能小於N- length of X
,但也不難用N-length of X operation
做你的工作。
相關問題
- 1. 排序三個數字陣列從最小到最大
- 2. 排序後排列兩次陣列
- 3. 多次排序以陣列
- 4. 排序K-排序陣列具有最小堆
- 5. 最佳陣列操作API
- 6. CoreData:排序操作的最大行數?
- 7. 用於排序三角形列表的最小交換次數
- 8. K方式合併排序陣列實現使用最小堆
- 9. 重新排列的陣列 - 最小,最大,第二最小,第二最大,
- 10. 性能最好的mongodb陣列操作
- 11. 排序陣列不工作
- 12. 陣列的最大和最小數字
- 13. k'th最高的兩個排序陣列
- 14. 最好的辦法排序multidimensionnal陣列
- 15. 重新安排行和numpy的陣列的列(在單次操作)
- 16. 陣列操作
- 17. 陣列操作
- 18. 陣列操作
- 19. 陣列使用陣列排序
- 20. 按列排序數據從最小到最大或按字母順序排列
- 21. 排序ND numpy的陣列與一個較小的ND陣列
- 22. 查找排序數組的最小交換次數
- 23. 排序陣列使用堆排序
- 24. 對堆棧中的數字序列進行排序所需的最小操作數
- 25. 如何以最小複雜度排序陣列?
- 26. 排序陣列
- 27. 排序陣列
- 28. 排序陣列
- 29. 排序陣列
- 30. 排序陣列
「最長連續增加的子序列」是否意味着未排序和排序序列中最長的公共子序列? – dasblinkenlight
@dasblinkenlight,沒有你提到的是最長的子序列,我的英語不夠好,我不知道如何解釋它,我嘗試用樣本來說明它,例如'1 6 4 3 5 2 7 '我說的是'1,2',但是最長的子序列是'1,4,5,7',如果不清楚,請告訴我描述它,如果你明白我的意思,可以隨意編輯我的答案澄清它。 –