输入一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即:买入和卖出一只股票一次),设计一个算法来计算你能获得的最大利润。
Tip:不能在买入股票前卖出股票。
Eg:
输入:7 1 5 3 6 4(空格间隔)
输出:5
解释:在第二天(股票价格 = 1)的时候买入,在第五天(股票价格为 = 6)的时候卖出,最大利润 = 6-1=5;
package DP;
import java.util.Scanner;
public class list03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
// 介于有部分小伙伴还不是很精通整数、字符串、字符串数组的转换,我就再唠叨一边吧!
// 读入一行数据,存储到字符串中
String string=in.nextLine();
// 将字符串以“_”分割为字符串数组
String[] charStrings=string.split(" ");
// 定义股票每日价格的整数型数组,长度为字符串数组的长度
int[] princes=new int[charStrings.length];
// 通过Integer.valueOf()将字符串数组中每个字符转成整数型数组中的整数
for(int i=0;i<charStrings.length;i++) {
princes[i]=Integer.valueOf(charStrings[i]);
}
System.out.println(maxProfit(princes));
}
public static int maxProfit(int[] prices) {
if(prices.length==0)
return 0;
// max用来存储最大利润
int max=0;
// min用来存储股票的最低价格
int min=prices[0];
// 通过for循环寻找最大利润与股票的最低价格
for(int i=1;i<prices.length;i++) {
// 将已存最大利润与目前利润作比较,取出最大利润
if(max<prices[i]-min)
max=prices[i]-min;
// 将已存最低价格与目前价格作比较,取出最低价格
// 这样既保证min为当前的最低价格,又保证max卖出的日期在min买入日期之前
min=Math.min(min, prices[i]);
}
return max;
}
}