模拟交易

来源:互联网 发布:sql server 2008 无法 编辑:程序博客网 时间:2024/06/10 01:51
假如你正在为一投资公司咨询。他们正在做模拟,对一给定的股票连续观察n天,记为i=1,2,…,n;对每天i,该股票每股的价格p(i)。假设在这个时间区间内,在某一天他们想买1000(第i天)股而在另一天(第j天)卖出所有这些股。为得到最多收益,他们应什么时候买什么时候卖?N=8(days) 对应的为P(i) ={5, 15, 25, 16,7, 17, 23, 49} ($)。请设计算法找到正确的i与j.

二、对于海量数据,怎样存储,怎样排序,怎样搜索。


一代码:

import java.util.ArrayList;
import java.util.List;

public class MyTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        int[] prices = {5, 15, 25, 16,7, 17, 23, 49 };
        List<Deal> dls = chooseDealTime(prices);
        for (Deal dl : dls) {
            System.out.println("buys at " + dl.getI() + ",sells at " + dl.getJ());
        }
    }

    private static List<Deal> chooseDealTime(int[] prices) {

        // int[] prices = {5, 15, 25, 16,7, 17, 23, 49};
        int num = prices.length - 1;
        int by = 0, sl = 0;
        List<Deal> deals = new ArrayList<Deal>();
        Deal deal = null;
        for (int i = 0; i < num; i++) {
            if (by == 0 && prices[i] < prices[i + 1]) {
                by = i + 1;
                continue;
            }
            if (by > 0) {
                if (prices[i] > prices[i + 1]) {
                    sl = i + 1;
                }
                else if (i == num - 1) {
                    sl = i + 2;
                }else{
                    continue;
                }
                deal = new Deal();
                deal.setI(by);
                deal.setJ(sl);
                deals.add(deal);
                by = 0;
                sl = 0;
                deal = null;
            }
        }
        return deals;
    }

}

class Deal {

    int i, j;

    int getI() {
        return i;
    }

    void setI(int i) {
        this.i = i;
    }

    int getJ() {
        return j;
    }

    void setJ(int j) {
        this.j = j;
    }

}




0 0