程序设计-股票最大收益问题(Java)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程大家好!欢迎来到我的网站! 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑,人工智能时代就要来临了,科… 继续阅读 前言icon-default.png?t=O83Ahttps://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
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值