(java)Best Time to Buy and Sell Stock II

本文介绍了一种使用贪心算法解决股票买卖问题的方法,即在每次股票价格上升时卖出,在价格下降时买入,从而实现最大化利润。通过实例演示了如何通过遍历数组来计算最大收益。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times). However, you may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).

思路:注意本题有上一题的区别,本题是要求你必须卖了才能买,用贪心算法可以解决,买次碰到价高的时候就把他卖了,碰到价低的时候就它买了,比如prices[]={10,8,12,7,5,9} 因为12比8大,那就在8的时候买入,12的时候卖出,profit=4,9又比5大,就在5的时候买入,9的时候卖出,profit=4+4=8;

所以最大利润是8;注意为什么只有prices[i+1]>prices[i]的时候才买入和卖出,因为只有这种情况,才能保证这个局部是获利的并且保证了不会有任意一次交易是亏钱的,并且把握住了每一次赚钱的机会。

代码如下(已通过leetcode)

public class Solution {
   public int maxProfit(int[] prices) {
    int sum=0;
    for(int i=0;i<prices.length-1;i++) {
    if(prices[i+1]>prices[i]) sum+=prices[i+1]-prices[i];
    }
    return sum;
   }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值