java能用算法实现找到这条线最大的跌幅的区间吗?
比如6-9区间跌了8个点
而12-14区间跌了9个点
所以最大的跌幅应该在12-14之间
小弟自己写的代码可惜没法实现:求大牛写个算法
public class MaxDown {
public static void main(String[] args) {
double[] a={-3,-2,-3,-6,-1,-1,5,3,2,-3,-2,-5,-2,-3,-11,1,3};
// double[] a={4,5,4,1,6,6,12,10,9,4,5,2,5,4,2,8,11};
double temp=0;
int start=1;
int end=2;
int i,j=0;
for(i=0;i<a.length-1;i++){
for( j=i+1;j<a.length-1;j++){
double drawdown=(a[j]/a[i])-1;
// if(isTrue(a[j],a[i])){
if(drawdown<temp){
temp=drawdown;
start=i;
end=j;
}
}
}
// }
System.out.println("start="+start+"\ta[start]="+a[start]+"\tend="+j+"\ta[end]="+a[end]);
}
public static Boolean isTrue(double j,double i){
if((j<0&&i<0)&&(j<i)) return true;
if((j>0&&i>0)&&(j<i)) return true;
if(j<0&&i>0)return true;
return false;
}
}
--------------------编程问答-------------------- 一个变量记录开始位置,一个变量记录结束位置,最后一个变量记录最大跌幅。
随时比较最大跌幅,并更新区间。 --------------------编程问答-------------------- --------------------编程问答-------------------- 这跟你这区间的定义有关, 6~14 都掉了16点。。。
难道你这区间是拒绝中间有波动的? --------------------编程问答-------------------- 6-14区间中9-10是上升的 我要看一直在下跌的最大幅度的 --------------------编程问答-------------------- 这个试试:
--------------------编程问答--------------------
public static void main(String[] args) {
double[] a = { -3, -2, -3, -6, -1, -1, 5, 3, 2, -3, -2, -5, -2, -3, -11, 1, 3 };
// 最大连续下跌差值,开始与结束下标中间变量// 下标默认为非法值
int startIndexTmp = -1, endIndexTmp = -1;
// 开始与结束下标最终值
int startIndex = -1, endIndex = -1;
// 记录最大连续下跌差值中间变量
double sumTmp = Integer.MIN_VALUE;
// 计算下跌,从下标1开始
for (int i = 1; i < a.length; i++) {
// 若当前值小于等于上一个值,则为下跌趋势,记录下标
if (a[i] <= a[i - 1]) {
endIndexTmp = i;
// 考虑临界情况,既开始下跌处
if (startIndexTmp == -1) {
startIndexTmp = i - 1;
}
} else {
// 下跌结束,判断下跌是否超过最大值,则记录新的下标
if (endIndexTmp != -1 && (a[startIndexTmp] - a[endIndexTmp] > sumTmp)) {
startIndex = startIndexTmp;
endIndex = endIndexTmp;
sumTmp = a[startIndexTmp] - a[endIndexTmp];
}
// 一次连续下跌结束,下标归零
startIndexTmp = endIndexTmp = -1;
}
}
// 若下标合法,则输出最后结果
if (startIndex != -1) {
System.out.println("最大差值下标为:" + startIndex + "," + endIndex + ";跌幅为:" + sumTmp);
} else {
System.out.println("股市一片大好,没有下跌");
}
}
int dropWidth=1;--------------------编程问答-------------------- 中间差值取绝对值,初始化最大跌幅,每次比较最大跌幅
int index=0;
double maxgradient=0;
for(int i=0;i<numbers.length-1;i++){
double temp=(numbers[i+1]-numbers[i])/dropWidth;
if(temp<0 && Math.abs(temp)>Math.abs(maxgradient)){
maxgradient=temp;
index=i;
}else {
continue;
}
}
补充:Java , Web 开发