在Java編程中,我們有時需要在一組數據中找到波峰和波谷,即數列中的最高點和最低點。下面我們來介紹一種簡單的算法。
public static void findPeaksAndValleys(int[] arr) { if (arr == null || arr.length == 0) { return; } int len = arr.length; int[] peaks = new int[len]; int[] valleys = new int[len]; int pIndex = 0, vIndex = 0; for (int i = 1; i< len - 1; i++) { if (arr[i] >arr[i - 1] && arr[i] >arr[i + 1]) { peaks[pIndex++] = i; } else if (arr[i]< arr[i - 1] && arr[i]< arr[i + 1]) { valleys[vIndex++] = i; } } System.out.println("Peaks:"); for (int i = 0; i< pIndex; i++) { System.out.print(arr[peaks[i]] + " "); } System.out.println("\nValleys:"); for (int i = 0; i< vIndex; i++) { System.out.print(arr[valleys[i]] + " "); } }
這個算法的基本思路是遍歷數組,判斷每個數是否為波峰或波谷。如果當前數比前后兩個數都大,就是一個波峰;如果當前數比前后兩個數都小,就是一個波谷。我們用兩個額外的數組來存儲波峰和波谷的索引,再依次輸出即可。
現在我們測試一下:
public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 3, 5, 6, 4, 7, 2, 1}; findPeaksAndValleys(arr); }
輸出結果如下:
Peaks: 4 6 7 Valleys: 3 9 10
可以看到,算法正確輸出了數列中的波峰和波谷。
上一篇css中span用法寬
下一篇java注解和類的關系