【发布时间】:2016-10-11 12:39:38
【问题描述】:
我正在尝试使用代码打印最长递增子序列,该代码有效,但它不打印正确的最长递增子序列。
例如,如果输入是: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;
}
【问题讨论】:
-
您的示例中想要的输出是什么?
-
1,2,6,9,12 不是您声明的输入 3,5,11,8,4,7,1,2,10,12,9,6 的子序列.
-
我认为那是他的程序输出,不是他想要的
-
我想要的是 3,4,7,10,12 而不是 1,2,6,9,12 我也不应该改变数字的顺序
-
我很感激这个惊喜接受:-)