java能用算法实现找到这条线最大的跌幅的区间吗?

问题描述

比如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;}}

解决方案八:
中间差值取绝对值,初始化最大跌幅,每次比较最大跌幅

时间: 2024-09-10 10:35:47

java能用算法实现找到这条线最大的跌幅的区间吗?的相关文章

Java常用排序算法及性能测试集合_java

现在再回过头理解,结合自己的体会, 选用最佳的方式描述这些算法,以方便理解它们的工作原理和程序设计技巧.本文适合做java面试准备的材料阅读. 先附上一个测试报告: Array length: 20000bubbleSort : 766 msbubbleSortAdvanced : 662 msbubbleSortAdvanced2 : 647 msselectSort : 252 msinsertSort : 218 msinsertSortAdvanced : 127 msinsertSor

java中非阻塞算法深入分析

在并发上下文中,非阻塞算法是一种允许线程在阻塞其他线程的情况下访问共享状态的算法.在绝大多数项目中,在算法中如果一个线程的挂起没有导致其它的线程挂起,我们就说这个算法是非阻塞的. 为了更好的理解阻塞算法和非阻塞算法之间的区别,我会先讲解阻塞算法然后再讲解非阻塞算法. 阻塞并发算法 一个阻塞并发算法一般分下面两步: 执行线程请求的操作阻塞线程直到可以安全地执行操作很多算法和并发数据结构都是阻塞的.例如,java.util.concurrent.BlockingQueue的不同实现都是阻塞数据结构.

Java实现快速排序算法(Quicktsort)

 这篇文章主要介绍了Java实现快速排序算法(Quicktsort),有需要的朋友可以参考一下 快速排序算法介绍 快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更有艺术,取一个基准元素,拆分之后基准元素左边的元素都比基准元素小,右边的元素都不小于基准元素,这样只需要分别对两个子数组排序即可,不再像归并排序一样需要归并操作.基准元素的选取对算法的效率影响很大,最好的情况是两个子数

使用java实现LIS算法,出操队形的问题_java

假设有序列:2,1,3,5,求一个最长上升子序列就是2,3,5或者1,3,5,长度都为3. LIS算法的思想是: 设存在序列a. ① 如果只有一个元素,那么最长上升子序列的长度为1: ② 如果有两个元素,那么如果a[1]>a[0],则最长上升子序列的长度为2,a[1]为该最长上升子序列的最后一个元素;若a[1]<a[0],则最长上升子序列的长度为1,a[0]和a[1]均为  其最长上升子序列的最后一个元素. ③ 如果由三个元素,那么如果a[2]>a[0],a[2]>a[1],则a[

java算法-java求教,算法竞赛入门经典 3.4 最长回文子串

问题描述 java求教,算法竞赛入门经典 3.4 最长回文子串 java新手求教,关键是怎么保存s[i]在buf中的位置,谢谢 解决方案 string longestPalindromeDP(string s) { int n = s.length(); int longestBegin = 0; int maxLen = 1; bool table[1000][1000] = {false}; for (int i = 0; i < n; i++) { table[i][i] = true;

算法 数据结构 java-以下java的最短路径算法应该如何实现

问题描述 以下java的最短路径算法应该如何实现 不知道怎么用额. 解决方案 http://blog.csdn.net/javaman_chen/article/details/8254309 解决方案二: http://download.csdn.net/detail/gareth_liao/5100648 解决方案三: 谢谢回复 解决方案四: 最短路径算法(java实现)

arc engine-arcengine二次开发中怎样找到两个点的中点且该点在某条线上?

问题描述 arcengine二次开发中怎样找到两个点的中点且该点在某条线上? 例如:有两个IPoint: pPoint1和pPoint2,一个IPolyline: pLine,想求出这两个IPoint的中点且该中点在线pLine上.代码怎么写?

java for循环问题放入一条string中

问题描述 java for循环问题放入一条string中 for(int i=1; i<5;++i){ System.out.println(i);} i的输出值是1,2,3,4:有什么办法能够把1234放在string中下面的这个样子如果输出是 " test1 AND table 1,test2 AND table 2,test3 AND table 3,test4 AND table4;该怎么办? 解决方案 StringBuffer sb = new StringBuffer(); f

java编写一个算法,一个数用数组表示,执行加1操作,之后的数组用一个数表示。

问题描述 java编写一个算法,一个数用数组表示,执行加1操作,之后的数组用一个数表示. 用java编写一个算法,一个数用数组表示,执行加1操作,之后的数组用一个数表示. 解决方案 数组可以表示很多数的-你说,用一个数表示啥意思?? 解决方案二: 你应该是想要下面的实现.如果有用请采纳. import java.util.ArrayList; import java.util.List; public class TestMain { public static void main(String