我一直在研究一个阵列,让我们说:{5,4,3,8,9,8,8,7,6}是我的阵列。我的目标是找出这个数组中有多少组降序数。
到目前为止,我已经使用我的代码来比较该索引中的数字是否小于之前的数字。这是我已经得到的,它打印出所有小于前一个索引值的值。
我是java的新手,之前曾在python中工作过,所以我不太确定如何存储小于之前的值以及有多少总数</ p>
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&amp; 5。 9,8&amp; 8,7,6
(我的print语句在循环中的那个点的唯一原因就是看它是否是正确的数字作为降序)
答案 0 :(得分:1)
鉴于你不需要知道运行的长度,只需要知道它们的数量,那么你实际上只是在寻找运行开始的次数:即元素比前一个要少一个但是对于前一个元素,情况并非如此:
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();
如果您希望实际存储降序运行而不仅仅计算它们,那么有点不清楚。如果您需要知道运行的是什么,那么您需要在列表中收集它们。如果您需要帮助,请在评论中告诉我。