我有一个这样的系列:
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。
我将如何继续这项工作?
答案 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之类的内容。还有相应的最大功能。这个特殊的库需要双打,浮点数应该有类似的东西。
如果这是家庭作业,手头的任务是学习如何开发算法,避免排序。没有必要。最小和最大的简单循环和两个跟踪变量都可以。对于系列的每次迭代,检查值并检查是否: