package cn.test1;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
public class StockAnalysize {
public static void main(String[] args) {
ArrayList<Node> source = new ArrayList<Node>();
for (int i = 0; i < 1000000; i++) {
Node node = new Node();
double price = Math.random() * 10 + 20;
DecimalFormat df = new DecimalFormat("0.00");
String format = df.format(price);
price = Double.valueOf(format);
node.setPrice(price);
node.setTime("2015-1-9-" + i);
source.add(node);
}
// System.out.println(source);
Date date1 = new Date();
Node maxNode = null;
Node minNode = null;
Node tempNode = null;
boolean beforePriceDi = false;// true位上升 false为下降
for (int i = 0; i < source.size(); i++) {
if (i == 0) {
maxNode = source.get(i);
minNode = source.get(i);
continue;
}
double currentPrice = source.get(i).getPrice();
double beforePrice = source.get(i - 1).getPrice();
boolean currentDi = (currentPrice - beforePrice) > 0 ? true : false;
if (beforePriceDi == currentDi) {
continue;
} else {
if (beforePriceDi) {
// 先上升后下降 极大值
// 比较是否比之前的最大值大
if (beforePrice - maxNode.getPrice() > 0) {
// 大就替换最大值
maxNode = source.get(i - 1);
// 大就替换最小值
if (tempNode != null) {
minNode = tempNode;
tempNode = null;
}
}
} else {
// 先下降后上升 极小值
// 判断是不是最小值 同 temp比较
if (tempNode != null) {
if (tempNode.getPrice() - beforePrice > 0) {
tempNode = source.get(i - 1);
}
continue;
}
// 小于则赋值给temp
if (minNode.getPrice() - beforePrice > 0) {
tempNode = source.get(i - 1);
}
}
beforePriceDi = currentDi;
}
}
Date date2 = new Date();
long time = date2.getTime()-date1.getTime();
System.out.println("min: " + minNode.toString() + "max: " + maxNode.toString() + "Di: " + (maxNode.getPrice() - minNode.getPrice())+"\nruntime: "+time +" milliseconds ");
}
}
class Node {
private String time;
private double price;
public Node(String time, double price) {
super();
this.time = time;
this.price = price;
}
public Node() {
super();
// TODO Auto-generated constructor stub
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return " time=" + time + ", price=" + price + "\n";
}
}
JAVA求股票K线最佳买卖时间等(复杂度为N)
最新推荐文章于 2024-07-18 09:43:25 发布