这是我的ArrayList:
[1,2,1,0,3,4]
我正在尝试返回这个:
[1,2,3,4]
这是我目前的尝试:
for (int i = 0; i < myArray.size() - 1; i++) {
if (myArray.get(i) < myArray.get(i + 1)) {
System.out.println("Increasing sequence...");
}
}
但是,这不是返回所需的输出,有什么想法吗?
您必须维护已打印的最后一个元素的索引(或值)并将其存储在某个变量中。然后,您必须为每个新元素使用存储的元素,并检查是否大于存储的元素。
正如您所提到的,无论如何,无论如何都必须打印第一个元素。
像这样的东西可能会起作用:
List<Integer> myArray = Arrays.asList(new Integer[]{1,2,1,0,3,4});
System.out.println(myArray.get(0));
int prevPrint = myArray.get(0);
for (int i = 1; i < myArray.size();i++) {
if (myArray.get(i) > prevPrint) {
System.out.println(myArray.get(i));
prevPrint = myArray.get(i);
}
}
程序失败的原因是,您只比较相邻的两个值,并且可能已经打印了一个大于两个相邻值中的任何一个的值。
一个类似的问题,但存在一种完全不同的方法(LIS),可以在这里找到
Parijat 的答案略有不同,以避免重复System.out.println
:
for (int j = 0; j < myArray.size();) {
System.out.println(myArray.get(j));
int start = j;
do {
++j;
while (j < myArray.size() && myArray.get(j) <= myArray.get(start));
}
试试这个,
public static List<Integer> findIncreasingOrder(int[] nums) {
List<Integer> result = new ArrayList<>();
int MAX = Integer.MIN_VALUE;
for (int i = 0; i < nums.length; i++) {
int value = nums[i];
if (value >MAX){
System.out.println(value);
MAX = value;
result.add(value);
}
}
return result;
}