繁体   English   中英

如何编写返回局部最大值索引的程序?

[英]How do I write a program which returns the index of the local maximum?

我如何编写一个程序来获取数字列表,然后找到局部最大值的索引

我一直在尝试编写该程序,但我不确定如何处理它。 局部最大值指的是列表中的一个integer大于它旁边的两个相邻数字。 程序做什么的例子;

CheckMaximum(data) 
data = {1,7,1,24,15}

数据是至少一个数组 integer

它会有一个 output 的

[1, 3]

因为局部最大值是 7 和 24,它们分别在索引 1 和 3 中。 如果输入的数组只有一个数字,它会返回一个[0]

这是一个提示:

for (int i = 1; (i+1) < items.length; i++){
    int current = items[i];
    int previous = items[i-1];
    int next = items[i+1];

    if ((current > previous) && (current > next)) {
         // i is a local maxima
    }
}

您可以从索引 1 循环到小于列表大小的 2,将每个元素与紧邻前后的元素进行比较(从当前索引加或减 1)。

static List<Integer> CheckMaximum(List<Integer> data) {
    if (data == null || data.size() < 2) return List.of(0); // this case is unclear
    List<Integer> res = new ArrayList<>();
    for (int i = 1; i < data.size() - 1; i++)
        if (data.get(i) > data.get(i - 1) && data.get(i) > data.get(i + 1)) res.add(i);
    return res;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM