java - 计算降序数?

标签 java arrays

我一直在努力获取一个数组,可以说:{5,4,3,8,9,8,8,7,6} 是我的数组。我的目标是找出这个数组中有多少组降序数字。

到目前为止,我已经使用我的代码来比较该索引中的数字是否小于前一个数字。据我所知,它打印出所有小于先前索引值的值。

我对java是半新手,之前曾在python中工作过,所以我不太确定如何存储小于以前的值以及总共有多少组

public class Descending {
    public static void main(final String[] args) {
        int[] x = {5, 4, 3, 8, 9, 8, 8, 7, 6 };
        countDescents(x);
    }

    public static void countDescents(final int[] xs) {
        int total = 0;
        // start with first index value.
        // Compare to previous index value to see if it is descending.
        for (int i = 1; i < xs.length; i++) {
            if (xs[i] < xs[i - 1]) {
                System.out.print(xs[i]);
            }
        }
    }
}

在此示例中,降序集的总数为 3(所需输出),即 5,4,3 & 9,8 & 8,7,6

(我的 print 语句位于循环中这一点的唯一原因只是为了看看它是否是正确的降序数字)

最佳答案

假设您不需要知道运行的长度,只需要知道运行的次数,那么您实际上只是在查找运行开始的次数:即一个元素比前一个元素少一个,但相同对于前一个元素不成立:

int runCount = 0;
boolean inRun = false;
for (int i = 1; i < array.length; i++) {
    if (array[i] < array[i - 1] && !inRun)
        runCount++;
    inRun = array[i] < array[i - 1];
}

如果您使用的是 Java 8,您可以使用 IntStream 而不是迭代来完成此操作:

int runCount = IntStream(1, array.length)
    .filter(i -> array[i] < array[i - 1])
    .filter(i -> i == 1 || array[i - 1] >= array[i - 2])
    .count();

如果您想要实际存储降序运行而不是仅仅计算它们,则有点不清楚。如果您需要知道运行是什么,那么您需要将它们收集在列表中。如果您需要帮助,请在评论中告诉我。

关于java - 计算降序数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39500151/

相关文章:

java - 将 JSON 输出到文件,然后将其输入回

java - 不使用 native 代码跟踪 java 堆

java - Oracle 通过 JPA 排序,数字在前

java - OpenGL 绘制基本线时抛出异常

java - 如何使用 Java 在 Apache spark 中将一行数组平面映射为多行?

c++ - 复制指针数组并跳过某些索引

php - 在 PHP 中使用 foreach 构建多维数组

c - 如何在c中的两个字符串数组之间添加数字

arrays - 在 Go 中,如何将 [16]float32 转换为 *float32

javascript - 为什么 .sort() 在按字母顺序对某些数组进行排序时表现不正确?