我不期望在這裏找到解決方案。但是我很難找出可能的錯誤。我覺得這是正確的解決方案,但是,解決方案並沒有通過我所有的測試案例。例如{2,2}
。以下是我用暴力手段編寫的代碼(最壞的情況 - 複雜度爲n!
)。任何幫助將不勝感激。我並不期待解決方案,但想知道我出錯的地方,以及如何正確解決問題。最長的子序列的長度
package org.practice;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
public class LengthofLIS {
int maxLength = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
LengthofLIS l = new LengthofLIS();
int[] nums = { 2,2 };
l.lengthOfLIS(nums);
}
public int lengthOfLIS(int[] nums) {
if (nums.length == 1)
return nums.length;
List<Integer> hs = new LinkedList<>();
dfs(nums, 0, 0, nums.length - 1, hs);
System.out.println(maxLength);
return maxLength;
}
public void dfs(int[] nums, int index, int length, int end, List<Integer> hs) {
if (index > end) {
return;
}
for (int i = index; i <= end; i++) {
if (hs.size() == 0) {
hs.add(nums[i]);
length++;
} else if (nums[i] > hs.get(hs.size() - 1)) {
hs.add(nums[i]);
length++;
}
else if (nums[i] <= hs.get(hs.size() - 1))
continue;
dfs(nums, i + 1, length, end, hs);
//System.out.println("Printing " + Arrays.asList(hs));
maxLength = Math.max(maxLength, hs.size());
if (maxLength == nums.length)
break;
if (hs.size() != 0) {
hs.remove(hs.get(hs.size() - 1));
length--;
}
}
}
}
在哪個平臺上提交?你得到什麼樣的錯誤?錯誤的答案或超時限? –
我正在嘗試leetcode。我得到一個錯誤的答案。 – jojo
很難找到你在代碼中做什麼。沒有人會徹底閱讀你的代碼。你需要描述你的算法。 –