O(n^2)
算法邏輯:貪心 + 二分搜索
數(shù)據(jù)定義補充:
開一個棧,將a[0]入棧,每次取棧頂元素top和讀到的元素ai做比較汉买,如果a[i]> top 則將a[i]入棧;如果a[i]<= top則二分查找棧中的比a[i]大的第1個數(shù)佩脊,并用a[i]替換它蛙粘。 最長序列長度即為棧的大小top垫卤。
這是很好理解的,對于x和y出牧,如果x < y且stack[y] < stack[x]穴肘,用stack[x]替換stack[y],此時的最長序列長度沒有改變崔列,但序列繼續(xù)變長的''潛力''增大了梢褐。
舉例:原序列為1,5赵讯,8盈咳,3,6边翼,7
開始1鱼响,5,8相繼入棧组底,此時讀到3丈积,用3替換5,得到1债鸡,3江滨,8;
再讀6厌均,用6替換8唬滑,得到1,3棺弊,6晶密;
再讀7,得到最終棧為1模她,3稻艰,6,7侈净。最長遞增子序列為長度4尊勿。