当前位置:编程学习 > JAVA >>

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 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,