如何找出最長增加子序列的最後一個和第一個元素之間的差異,使得LIS中的(最後一個元素 - 第一個元素)的值是最大 ?最長增加子序列,使得LIS中的最後一個元素最大
1
A
回答
1
讓我們使用標準的動態規劃解決方案,其中我們將f[i]
定義爲i-th
元素中結尾最長的子序列。我們可以爲每個i
儲存一對(max length, smallest first element)
。人們可以證明它導致了一個正確的全局解決方案(直觀地說,它是正確的,因爲它仍然存儲了針對以特定元素結尾的所有子序列的最佳解決方案,並且事實上一個前綴比另一個意味着總體子序列「更好」更好)。
如果性能要求很高,您也可以通過將這些對存儲在高效的數據結構(如分段樹)中使其成爲O(N log N)
。
0
很天真的算法如下:
- 在第一次找到所有最大連續子序列和它們的長度保持最大長度(只是保持這個數)。
- 在第二遍中找到所有最大長度序列的開始和結束的差異,並輸出它們中最大的一個。
所有這一切都在O(n)中,可以一次完成。爲了簡化它,我將其分解爲兩個步驟。
相關問題
- 1. 最長增加子序列 - 無法理解實際LIS創建
- 2. 找到最長遞增子(LIS)
- 3. 查找最大增加的最長子序列
- 4. 最大最長遞增序列的
- 5. 最長增加子序列的應用
- 6. 最長增加的子序列2d
- 7. data.table中POSIXct列的最大/最後一個元素?
- 8. OCaml searchin增長最長的子序列
- 9. Haskell增加一個元組的最後一個元素
- 10. 最長是如何增加子序列DAG中最長路徑的特例?
- 11. 顯示最長的遞增子序列
- 12. 增加重複元素的最大值
- 13. 如何打印來自給定數組的最長增量子序列(LIS)?
- 14. 獲得最後一列最後一個單元格的值
- 15. 循環最長遞增子序列
- 16. 最長遞增循環子序列
- 17. :最後孩子沒有選擇的最後一個元素
- 18. 最長子序列
- 19. 長度和最長增加的子序列的總和
- 20. 如何找到最長增加子序列的實際序列?
- 21. 這對最後一列的最大元素在MATLAB
- 22. 通過點擊最後一個元素追加最後一個元素
- 23. XSLT獲得最後一個元素
- 24. 使用二進制搜索的最長增加子序列
- 25. 陣列中最大的子集,使得最小和最大的元素分開小於K
- 26. 最長的子序列,其元素構成一組遞增整數
- 27. 最長最大重複子
- 28. 返回序列中的第一個和最後一個元素
- 29. 2D陣列的最小/最大元素
- 30. 獲取最後一個子元素
問題不清楚給我。假設我們有1,100,0,1,2,3,4,5,6那麼答案是什麼? 1,100或0,1,2,3,4,5,6 –
@SaeedAmiri這裏的答案應該是0,1,2,3,4,5,6 –
@domen正在用DP soluiton嘗試它,在索引i處它存儲的值直到最大長度的當前idex和最大值在第i個位置結束。 –