假如一个数组存储了一个股票,在一天交易窗口内各时间点的股票价格(正整数),只允许一次买入和一次卖出,请提供一个算法,计算出通过买入和卖出可以得到的最大利润

来源:互联网 发布:程序员为什么转行? 编辑:程序博客网 时间:2024/05/01 00:51

参考:http://blog.csdn.net/jx_870915876/article/details/52587634

题目描述

假如一个数组存储了一个股票,在一天交易窗口内各时间点的股票价格(正整数),只允许一次买入和一次卖出,请提供一个算法,计算出通过买入和卖出可以得到的最大利润

输入

价格序列

输出

最大可能的利润

样例输入
2 3 2 4

样例输出
2

数据是有顺序的,卖出不能在买入之前

Java代码实现

import java.util.Scanner;public class Main2 {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        String inputString = "";        if (sc.hasNextLine()) {            inputString = sc.nextLine();        }        String[] inputArrayInt = inputString.split(" ");        int len = inputArrayInt.length;        int[] intArray = new int[len];        for (int i = 0; i < len; i++) {            intArray[i] = Integer.valueOf(inputArrayInt[i]);        }        maxProfit(intArray);    }    public static void maxProfit(int[] array) {        int result = 0;        if (array.length == 0) {            System.out.println(0);        }        int max = array[0];        int min = array[0];        int max_index = 0;        int min_index = 0;        for (int i = 0; i < array.length; i++) {            if (array[i] <= min) {                min = array[i];                min_index = i;            }            else if (array[i] >= max || (max_index <= min_index)) {                max = array[i];                max_index = i;            }            if (max_index >= min_index) {                int temp = max - min;                result = result >= temp ? result : temp;            }        }        System.out.println(result);    }}
0 0
原创粉丝点击