查找數組中最長的連續子序列的長度,其中的元素構成一組連續增加的整數。 輸入文件包含數字n
(數組中的元素數),後跟整數n
。
示例輸入 - 10 1 6 4 5 2 3 8 10 7 7
示例輸出-6(1 6 4 5 2 3,因爲它們使集合1 2 3 4 5 6)。
我能夠編寫滿足0<n<5000
的算法,但爲了獲得100個點,該算法必須爲0<=n<=50000
工作。最長的子序列,其元素構成一組遞增整數
回答
這樣的事情呢?按降序排列數組元素,每個元素以其索引範圍作爲局部最大值(例如,A[0] = 10
應該是數組索引的最大值,[0, 10]
,而A[3] = 4
應該是數組索引的局部最大值,[3,3]
。現在遍歷此列表,找到最長,連續下降的序列,其中的指數範圍都包含在初始範圍。
10 1 6 4 5 2 3 8 10 7 7
=> 10, [ 0,10]
8, [ 1, 7]
7, [ 9,10]
6, [ 1, 6] <--
5, [ 3, 6] | ranges
4, [ 3, 3] | all
3, [ 5, 6] | contained
2, [ 5, 5] | in [1,6]
1, [ 1, 1] <--
嗯,確實是一個非常好的解決方案,但有反覆出現的元素確實傷害了算法rithm。例如,如果在5到達另一個5之後,算法會變得非常模糊。或者在更壞的情況下,如果數組是這樣的 - 1 5 4 2 3 7 1 5 4 2 3? –
@DavidAsryan感謝您的評論。按照其開始索引排列數組中的每組重複項。任何作爲連續任期候選人的副本都是(1)該條款之後的下一個較低的數字,以及(2)由於是下一個較低的數字,必須共享相同的開始和結束(如果他們在同一側)或者具有相互排斥的索引範圍作爲局部最大值(例如,在你的例子中,5的值作爲連續7的候選項,例如'1 5 4 2 3 7 1 5 4 2 3')。 –
@DavidAsryan你也可以澄清一下這樣的解決方案:'1 1 2 2 3 3 4 4'。 –
- 1. 顯示最長的遞增子序列
- 2. 遞歸的記憶遞增最長遞增子序列
- 3. 循環最長遞增子序列
- 4. 最長遞增循環子序列
- 5. 最長增加子序列,使得LIS中的最後一個元素最大
- 6. 最大最長遞增序列的
- 7. OCaml searchin增長最長的子序列
- 8. 的Java:最長遞增子
- 9. 我們如何確保Bitonic序列將從一個最長的遞增子序列和一個最長的遞減子序列形成?
- 10. 序言 - 尋找最長遞增子
- 11. 在C中查找遞增順序的最大子數組元素的總和?
- 12. 最長遞增子序列遞歸版本
- 13. 最長增加子序列的應用
- 14. 最長增加的子序列2d
- 15. 將數組劃分爲塊,其中每個塊是最長的遞增(遞增)序列
- 16. 整數列表中最長的子序列的長度
- 17. 要找到給定的整數數組所有最長遞增子序列 - 動態規劃
- 18. 如何從一個遞增的整數生成重複序列
- 19. 以遞歸方式在Java中找到數組中最長的遞增序列
- 20. 給定數組中數組元素的最長重複子集
- 21. 最長的子序列數
- 22. 最長共同遞增子序列動態編程
- 23. 整數不遞增,列表不增長,列表不增長,列表不增長...來自會話的值c#asp.net
- 24. 排序一個由100個元素組成的整數數組,其中只有3個元素
- 25. 查找數組中元素數量最大的子序列
- 26. 最長遞減的元素序列中的矩陣
- 27. 將元素添加到數組中不會增加其長度
- 28. 最大乘積遞增子序列
- 29. 第二長的遞增子序列的長度
- 30. 查找SQL中連續遞增數字的最長序列
或許,如果你發佈一些代碼來顯示你已經嘗試了什麼,人們可能沒有解決這一問題。(雖然,因爲你要求更高效的算法,所以我不是你可以提供的技術比你已經擁有的更多...) –