分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程大家好!欢迎来到我的网站! 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑,人工智能时代就要来临了,科… 继续阅读 前言https://www.captainai.net/
package live.every.day.Programming;
/**
* 股票最大收益问题:
* 给定一个数组,存储着按照时间排序的股票价格,第i个位置的元素为第i次交易时的股票价格;现假设只允许你进行一次买,然后在某一时刻卖出(单只股票)。
* 请设计算法,求解你可能获得的最大收益,如果股价是非增的,则收益为0。
*
* 思路:预处理数组,将数组的每一项减去其紧挨着的前一项,首项设为0;其含义为:将股价数组,变为股价增幅数组。
* 预处理之后,原问题就转化为求数组最大子段和的问题,然后使用最大子段和的求解算法解决该问题。
*
* @author Created by LiveEveryDay
*/
public class StockMaxProfit {
public static void main(String[] args) {
int[] a = {3, 5, 1, 2, 5, 8, 9, 6};
preProcess(a);
System.out.printf("Max profit is: %d%n", maxSegmentSum(a));
}
public static int maxSegmentSum(int[] a) {
int maxSum = 0;
int sum = 0;
for (int j : a) {
sum += j;
if (sum > maxSum) {
maxSum = sum;
}
if (sum < 0) {
sum = 0;
}
}
return maxSum;
}
private static void preProcess(int[] a) {
int i = a.length - 1;
while (i > 0) {
a[i] = a[i] - a[i - 1];
i--;
}
a[0] = 0;
}
}
// Output:
/*
Max profit is: 8
*/