2014-02-26 103 views
-1

我需要返回數組的LIS最長的子序列數

僞例如:

if the arr is 
int []arr = {2,4,90,-3,-2,-1,-10,-9,-8}; 
num of LIS is: 3 
2,4,90 
-3,-2,-1 
-10,-9,-8 

例子2:

arr [] = {2,-3,4,90,-2,-1,-10,-9,-8}; 
num of LIS is: 4 
2,4,90 
-3,4,90 
-3,-2,-1 
-10,-9,-8 

我試圖做到這一點:

int [] A = {2,4,90,-3,-2,-1,-10,-9,-8}; 
    int[] dp = new int[A.length]; 

    for (int i = 0; i < A.length; i++) { 
     dp[i] = 1; 

     for (int j = 0; j <= i - 1; j++) { 
      if (A[j] < A[i]) { 
       dp[i] = dp[i] + dp[j]; 
      } 
     } 
     System.out.println(dp[dp.length - 1]) ; 
    } 
+4

你面臨什麼問題? – Kakarot

+0

您應該嘗試找到最小值,然後將其分配 – Kakarot

+1

'C'或'Java' ?? – devnull

回答

1

在你的代碼只是不斷加入到DP [我]在inner for循環中查找所有查找。理想情況下,您應該找到所有職位的子序列的最大大小(j < i),然後將該最大值添加到d [i]。 正確的方法如下:

int maxSizeOfSubseq = 0; 
for (int i = 0; i < A.length; i++) { 
    dp[i] = 1; 
    maxSizeOfSubseq = 0; 
    for (int j = 0; j <= i - 1; j++) { 
     if (A[j] < A[i] && dp[j] > maxSizeOfSubseq) { 
      maxSizeOfSubseq = dp[j]; 
     } 
    } 
    dp[i] = dp[i] + maxSizeOfSubseq ; 
      System.out.println(dp[dp.length - 1]) ; 
} 


// Now find the Max Size Of Subsequence amongst all computes subsequence lengths 
maxSizeOfSubseq = 0; 
for(int count = 0 ; count < dp.length; ++count) 
{ 
    if(dp[i] > maxSizeOfSubseq) 
    { 
    maxSizeOfSubseq = dp[i] 
    } 
} 

return maxSizeOfSubseq ; 
+0

它不工作..例如arr [] = {2,-3,4,90,-2,-1,-10,-9,-8}; 需要返回4 反擊3 – agamoti

+0

你確定它應該是4嗎?看起來有3個增長的子序列,所有長度爲3,2和3,對我來說:-3,4,90; -2,-1; -10,-9,-8。 – Jack0x539

+0

[2,4,90] , [-3,4,90] , [-3,-2,-1] , [-10,-9,-8] 謝謝,但。 。它仍然沒有工作.. – agamoti