C 最長上公升子串行 動態規劃

2021-10-04 11:13:39 字數 2474 閱讀 4808

已知乙個未排序陣列,求這個陣列最長上公升子串行的長度。

例如:[1,3,2,3,1,4]

其中有很多上公升子串行,如[1,3],[1,2,3],[1,2,3,4]等,其中最長的上公升子串行長度為4。

分別考慮o(2^n)與o(n*logn)兩種複雜度演算法。

n個元素組成的陣列,列舉陣列的全部子串行,即陣列中的任意某個元素都有選擇、不選擇兩種可能,時間複雜度o(2^n),列舉時選擇最長的子串行長度作為結果。

方法一:

#include

class

solution

~solution()

intlengthoflist

(std::vector<

int>

& nums)

std::vector<

int>

dp(nums.

size()

,0);

dp[0]

=1;int list =1;

for(

int i =

0; i < nums.

size()

; i++)}

if(listreturn list;}}

;int

main()

; std::vector<

int> nums;

for(

int i =

0; i <

6; i++

) solution solve;

printf

("%d\n"

,solve.

lengthoflist

(nums));

return0;

}

執行結果為:

4
方法二:

#include

class

solution

~solution()

intlengthoflist

(std::vector<

int>

& nums)

std::vector<

int> stack;

stack.

push_back(0

);for(

int i =

1; i < nums.

size()

; i++

)else}}

}return stack.

size()

;}};

intmain()

; std::vector<

int> nums;

for(

int i =

0; i <

6; i++

) solution solve;

printf

("%d\n"

, solve.

lengthoflist

(nums));

return0;

}

執行結果為:

4
方法三:

#include

class

solution

~solution()

intlengthoflist

(std::vector<

int>

& nums)

std::vector<

int> stack;

stack.

push_back(0

);for(

int i =

1; i < nums.

size()

; i++

)else

}return stack.

size()

;}private

:int

binary_search

(std::vector<

int>

& nums,

int target)

else

if(target) end = mid -1;

}else

if(target>nums[mid]

) begin = mid+1;

}}return index;}}

;int

main()

; std::vector<

int> nums;

for(

int i =

0; i <

6; i++

) solution solve;

printf

("%d\n"

, solve.

lengthoflist

(nums));

return0;

}

執行結果:

4

最長上公升子串行 (動態規劃)

描述乙個數的序列 bi,當 b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等。...

最長上公升子串行(動態規劃)

描述 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等。這...

最長上公升子串行(動態規劃)

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