问题描述
比如6-9区间跌了8个点而12-14区间跌了9个点所以最大的跌幅应该在12-14之间小弟自己写的代码可惜没法实现:求大牛写个算法publicclassMaxDown{publicstaticvoidmain(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};doubletemp=0;intstart=1;intend=2;inti,j=0;for(i=0;i<a.length-1;i++){for(j=i+1;j<a.length-1;j++){doubledrawdown=(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]);}publicstaticBooleanisTrue(doublej,doublei){if((j<0&&i<0)&&(j<i))returntrue;if((j>0&&i>0)&&(j<i))returntrue;if(j<0&&i>0)returntrue;returnfalse;}}
解决方案
解决方案二:
一个变量记录开始位置,一个变量记录结束位置,最后一个变量记录最大跌幅。随时比较最大跌幅,并更新区间。
解决方案三:
该回复于2013-12-12 09:17:40被版主删除
解决方案四:
这跟你这区间的定义有关,6~14都掉了16点。。。难道你这区间是拒绝中间有波动的?
解决方案五:
6-14区间中9-10是上升的我要看一直在下跌的最大幅度的
解决方案六:
这个试试:publicstaticvoidmain(String[]args){double[]a={-3,-2,-3,-6,-1,-1,5,3,2,-3,-2,-5,-2,-3,-11,1,3};//最大连续下跌差值,开始与结束下标中间变量//下标默认为非法值intstartIndexTmp=-1,endIndexTmp=-1;//开始与结束下标最终值intstartIndex=-1,endIndex=-1;//记录最大连续下跌差值中间变量doublesumTmp=Integer.MIN_VALUE;//计算下跌,从下标1开始for(inti=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("股市一片大好,没有下跌");}}
解决方案七:
intdropWidth=1;intindex=0;doublemaxgradient=0;for(inti=0;i<numbers.length-1;i++){doubletemp=(numbers[i+1]-numbers[i])/dropWidth;if(temp<0&&Math.abs(temp)>Math.abs(maxgradient)){maxgradient=temp;index=i;}else{continue;}}
解决方案八:
中间差值取绝对值,初始化最大跌幅,每次比较最大跌幅