求最長上公升子串行的長度

2021-06-26 23:14:27 字數 863 閱讀 2954

假設要尋找最長上公升子串行的序列是a[n],然後尋找到的遞增子串行放入到陣列b中。

(1)當遍歷到陣列a的第乙個元素的時候,就將這個元素放入到b陣列中,以後遍歷到的元素都和已經放入到b陣列中的元素進行比較;

(2)如果比b陣列中的每個元素都大,則將該元素插入到b陣列的最後乙個元素,並且b陣列的長度要加1;

(3)如果比b陣列中最後乙個元素小,就要運用二分法進行查詢,查詢出第乙個比該元素大的最小的元素,然後將其替換。

在這個過程中,只重複執行這兩步就可以了,最後b陣列的長度就是最長的上公升子串行長度。例如:如該數列為:

5 9 4 1 3 7 6 7

那麼:5 //加入

5 9 //加入

4 9 //用4代替了5

1 9 //用1代替4

1 3 //用3代替9

1 3 7 //加入

1 3 6 //用6代替7

1 3 6 7 //加入

最後b中元素的個數就是最長遞增子串行的大小,即4。

要注意的是最後陣列裡的元素並不就一定是所求的序列,

例如如果輸入 2 5 1

那麼最後得到的陣列應該是 1 5

而實際上要求的序列是 2 5

//用二分查詢的方法找到乙個位置,使得num>b[i-1] 並且num=b[mid])  low=mid+1;

else high=mid-1;

} return low;

}

int dp(int n)

else//用二分的方法在b陣列中找出第乙個比a[i]大的位置並且讓a[i]替代這個位置

}

return len;

}

最長上公升子串行求長度

普通dp 複雜度o 2 1 include 2 using namespace std 34 const int n 1010 5 inta n dp n n 67 intmain 1819 int res 0 20 for int i 1 i n i 21 res max res,dp i 222...

最長上公升子串行的長度

描述 在一條單車道的公路上有n輛汽車行駛,從前向後第i輛車的最高速度是vi。所有車輛都會盡量保持最高速度行駛。不過由於只有單車道,所以當後方快車追上前方慢車後,無法超車,只能降速跟在慢車後面。於是經過足夠長時間 足夠後方快車追上前方慢車 的行駛後,某些車輛會聚成一隊以相同的速度向前行駛。我們把這些聚...

最長上公升子串行的長度

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長的上公升子串行是 2,3,7,101 它的長度是 4。說明 可能會有多種最長上公升子串行的組合,你只需要輸出對應的長度即可。演算法的時間複雜度應該為 o n 2 inclu...