LeetCode:买卖股票的最佳时机 II

题目:

假设有一个数组,它的第 i 个元素是一个给定的股票在第 i 天的价格。
设计一个算法来找到最大的利润。你可以完成尽可能多的交易(多次买卖股票)。然而,你不能同时参与多个交易(你必须在再次购买前出售股票)。

分析:

想要达到总体最优解,我们必须保证每个局部取到最优解。因为输入是数组,每个元素代表股票的当天价格,所以我们可以以每两个相邻元素作为一个局部考虑,即后一天的股价比前一天的高,我们就卖出然后计算收益;后一天的股价比前一天的低或者相等,我们就保留股票避免亏损(当然这在现实中是不可能的)。遍历数组,把所有的局部最大收益相加,得到总体最大收益。

代码:

public int maxProfit(int[] prices) {
        //初始化收益
        int profit=0;
        //如果传入的数组内没有元素,则返回0
        if(prices.length==0){
            return 0;
        }
        //这个地方运用贪心算法,即每两个相邻元素为单位,假设每次都获取最大,总体最大利润就是局部最大利润的和
        for(int i=0;i<prices.length-1;i++){
            if(prices[i]<prices[i+1]){
                profit+=prices[i+1]-prices[i];
            }
        }
        return profit;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值