由於其中含有N個不同的整數數組,找到最長子,其滿足:如何找到最長約束子
- 子序列的起始單元是最小的子序列。
- 子序列的結束元素是子序列中最大的元素。
例如: 8,1,9,4,7。答案是1,4,7。
2,6,5,4,9,8。答案是2,6,5,4,9或2,6,5,4,8。
這裏是一個O(N^2)
算法:
- 設
X
是數字的陣列。 - 迭代
X
。假設我們在索引i
。假設Y
是其中Y [j]是(j, i]
中小於X [j]的元素的數量。假設z
是小於X [i]的[j, i]
中的元素數目。如果X [j]小於X [i],我們可以得到滿足約束條件的長度爲z-Y [j]的子序列。 設置
z
至1
。 Loopj
fromi-1
down to0
。if X[j] < X[i]: z++; ans = max(ans, z - Y[j]); else Y[j]++;
我們可以做得更好?我認爲應該有一個O(NlogN)
算法來查找最大長度。
[功課](http://meta.stackexchange.com/q/10811/133817)應該被標記爲這樣的,不應該與現有的解決方案要求的解決方案,而是約問題。 – outis