查找系列中的最小和最大点

时间:2016-07-12 13:00:02

标签: java

我有一个这样的系列:

20 22 25 27 30 31 30 25 22 19 21  25 28 30 28 27...

一旦数字达到30附近,它们就会开始消极地移动,一旦它们达到20附近,它们就会开始正向移动。

我需要使用某种算法找到这两点。我完全迷失了。

我无法进行排序,因为我的最大值为31,最小值为19。

在实际实现中,数字可以更改,也可以是Float,而不仅仅是int。它可以是这样的:

55.20 57.35 54.30 59.25 61.00 58.20 55.40 53.50 58.75 60.10 55.15 53.40 50.00 51.10 52.00

在这种情况下,53和60是点,另外,第三个下点50.00。

我将如何继续这项工作?

2 个答案:

答案 0 :(得分:2)

import java.util.List;
import java.util.ArrayList;

public class GetExtrema  {

  public static <T extends Comparable<T>> List<T> getExtrema(T[] series) {
    List<T> extrema = new ArrayList<T>();
    extrema.add(series[0]);
    boolean upElseDown = series[1].compareTo(series[0]) > 0;
    for (int i = 2; i < series.length; ++i) {
        if (series[i].compareTo(series[i-1]) > 0 != upElseDown) {
            extrema.add(series[i-1]);
            upElseDown = !upElseDown;
        } // end if
    } // end for
    extrema.add(series[series.length-1]);
    return extrema;
  } // end getExtrema()

  public static void main(String[] args) {

    Integer[] s1 = {20,22,25,27,30,31,30,25,22,19,21,25,28,30,28,27};
    List<Integer> extrema = getExtrema(s1);
    System.out.println(extrema);

    Double[] s2 = {55.2,57.3,54.3,59.2,61.,58.2,55.4,53.5,58.7,60.1,55.1,53.4,50.,51.1,52.};
    List<Double> extrema2 = getExtrema(s2);
    System.out.println(extrema2);

    System.exit(0);

  } // end main()

} // end class GetExtrema

编译和执行:

javac GetExtrema.java;
CLASSPATH=. java GetExtrema;
## [20, 31, 19, 30, 27]
## [55.2, 57.35, 54.3, 61.0, 53.5, 60.1, 50.0, 52.0]

答案 1 :(得分:1)

如果这不是家庭作业,您可以使用外部图书馆,请考虑Apache Commons StatUtils min function之类的内容。还有相应的最大功能。这个特殊的库需要双打,浮点数应该有类似的东西。

如果这是家庭作业,手头的任务是学习如何开发算法,避免排序。没有必要。最小和最大的简单循环和两个跟踪变量都可以。对于系列的每次迭代,检查值并检查是否:

  • 当前值小于min,如果将min设置为当前值
  • 如果将max设置为当前值
  • ,则当前值大于max