我一直在努力获取一个数组,可以说:{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/