要求一组数据的波峰和波谷值,可以使用以下算法:

  1. 遍历数据数组,从第二个元素开始到倒数第二个元素结束。
  2. 判断当前元素是否为波峰或者波谷。波峰是指当前元素大于其前后两个元素,波谷是指当前元素小于其前后两个元素。
  3. 如果是波峰,则将当前元素添加到波峰值数组中。
  4. 如果是波谷,则将当前元素添加到波谷值数组中。
  5. 最后返回波峰值数组和波谷值数组。

以下是一个用Java实现的示例代码:

public class PeakAndValley {
    public static void main(String[] args) {
        int[] data = {1, 2, 3, 2, 1, 4, 5, 3, 2};
        int[] peaks = findPeaks(data);
        int[] valleys = findValleys(data);

        System.out.println("Peaks: ");
        for (int peak : peaks) {
            System.out.print(peak + " ");
        }
        System.out.println();

        System.out.println("Valleys: ");
        for (int valley : valleys) {
            System.out.print(valley + " ");
        }
        System.out.println();
    }

    public static int[] findPeaks(int[] data) {
        List<Integer> peaksList = new ArrayList<>();

        for (int i = 1; i < data.length - 1; i++) {
            if (data[i] > data[i-1] && data[i] > data[i+1]) {
                peaksList.add(data[i]);
            }
        }

        int[] peaks = new int[peaksList.size()];
        for (int i = 0; i < peaksList.size(); i++) {
            peaks[i] = peaksList.get(i);
        }

        return peaks;
    }

    public static int[] findValleys(int[] data) {
        List<Integer> valleysList = new ArrayList<>();

        for (int i = 1; i < data.length - 1; i++) {
            if (data[i] < data[i-1] && data[i] < data[i+1]) {
                valleysList.add(data[i]);
            }
        }

        int[] valleys = new int[valleysList.size()];
        for (int i = 0; i < valleysList.size(); i++) {
            valleys[i] = valleysList.get(i);
        }

        return valleys;
    }
}

对于示例数据 {1, 2, 3, 2, 1, 4, 5, 3, 2},输出结果为:

Peaks: 
3 5 
Valleys: 
1 2 1 2 

其中,波峰值为3和5,波谷值为1、2、1和2


原文地址: https://www.cveoy.top/t/topic/iuls 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录