Solución dp
int lengthOfLIS (vector < int > & nums) { // dp解法O (n ^ 2) int len = nums.size (); si (len == 0 ) de retorno 0 ; vector < int > dp (LEN, 1 ); int maxlen = 1 ; para ( int i = 1 ; i <len; i ++ ) { para ( int j = 0 ; j <i; j ++ ) { si (nums [i]> nums [j]) { dp [i] = max (dp [i], dp [J] + 1 ); } } si (dp [i]> maxlen) maxlen = dp [i]; } volver maxlen; }
Más dos descomposición codiciosos
clase de soluciones { público : int lengthOfLIS (vector < int > & nums) { int s = nums.size (); si (s == 0 ) de retorno 0 ; int * sta = nuevo int [s]; int cnt = 1 ; sta [ 0 ] = nums [ 0 ]; para ( int i = 1 ; i <s; i ++ ) { si (nums [i]> sta [CNT- 1 ]) { sta [cnt] = nums [i]; cnt ++ ; } más { int pos = LOWER_BOUND (sta, sta + cnt, nums [i]) - STA; sta [POS] = nums [i]; } } volver CNT; } };