2016-09-14 80 views
0

我一直在研究一個數組,讓我們說:{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

(唯一的原因,我的打印語句是在該點在循環中只是看看它是否是正確的數字,因爲降序)

+0

如果您計算價值增加的次數,該怎麼辦? – pensono

+0

@geekygenius這對vs做下降數字會有什麼好處?它會是同一個概念嗎? – Jack

+0

前一個值大於下一個值加1的數字等於下降數字的子列表數目。該解決方案不需要循環中的內存。 – pensono

回答

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(); 

這是一個有點不清楚,如果你正在尋找實際存儲降運行而不只是數它們。如果您需要了解運行情況,那麼您需要將它們收集到列表中。如果你需要幫助,請在評論中告訴我。