我正在尝试使用一段代码来打印最长的递增子序列,代码可以运行,但它没有打印出正确的最长递增子序列。
例如,如果输入是:3,5,11,8,4,7,1,2,10,12,9,6,则输出为:[1, 2, 6, 9, 12],而我想要的输出是:3,4,7,10,12。
我已经调试了插入和打印ArrayList的方法,它是正确的。我相信在这里有什么问题,为什么会出现错误?为什么会改变数字的顺序?请帮我解决问题。
例如,如果输入是:3,5,11,8,4,7,1,2,10,12,9,6,则输出为:[1, 2, 6, 9, 12],而我想要的输出是:3,4,7,10,12。
我已经调试了插入和打印ArrayList的方法,它是正确的。我相信在这里有什么问题,为什么会出现错误?为什么会改变数字的顺序?请帮我解决问题。
public static ArrayList<Integer> lengthOfsequance(ArrayList<Integer> nums) {
if (nums == null || nums.size() == 0)
return null;
ArrayList<Integer> list = new ArrayList<Integer>();
for (int num : nums)
{
if (list.size() == 0 || num > list.get(list.size() - 1))
list.add(num);
else
{
int i = 0;
int j = list.size() - 1;
while (i < j)
{
int mid = (i + j) / 2;
if (list.get(mid) < num)
i = mid + 1;
else
j = mid;
}
list.set(j, num);
}
}
return list;
}