繁体   English   中英

Java - 遍历 ArrayList 只为增加元素

[英]Java - iterate through ArrayList for only increasing elements

这是我的 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM