给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入: [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
     随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
示例 2:

输入: [1,2,3,4,5]
输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
     注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
     因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
示例 3:

输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

思路:

情况一:今天买,明天卖,收益为prices[i]-prices[i-1]

情况二:连续上涨,则在第一天买,在上涨到顶峰的最后一天卖掉

情况三:连续下降, 则不买卖收益最大,不会亏钱。
算法流程:

遍历整个股票交易日价格列表 price,策略是所有上涨交易日都买卖(赚到所有利润),所有下降交易日都不买卖(永不亏钱)。
设 tmp 为第 i-1 日买入与第 i 日卖出赚取的利润,即 tmp = prices[i] - prices[i - 1] ;
当该天利润为正 tmp > 0,则将利润加入总利润 profit;当利润为 0 或为负,则直接跳过;
遍历完成后,返回总利润 profit。
复杂度分析:

时间复杂度 O(N):只需遍历一次price;
空间复杂度 O(1):变量使用常数额外空间。

提交的代码:

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

完整的代码:

public class Solution122 {
public static int maxProfit(int[] prices) {
        int sum=0;
        for(int i=1;i<prices.length;i++)
        {
            if(prices[i]-prices[i-1]>0)
            {
                sum+=prices[i]-prices[i-1];
            }
        }
        return sum;
    }
public static void main(String[] args)
{
    int nums[] = {7,1,5,3,6,4};
    System.out.println(maxProfit(nums));
}
}

Leetcode--122. 买卖股票的最佳时机Ⅱ相关推荐

  1. leetcode 122. 买卖股票的最佳时机 II 思考分析

    目录 题目 贪心法 题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时 ...

  2. Leetcode 122.买卖股票的最佳时机II

    Time: 20190904 Type: Easy 考察:动态规划 题目描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完 ...

  3. Leetcode 122.买卖股票的最佳时机 II (每日一题 20210618)

    给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票).注意:你不能同时参与多 ...

  4. leetcode 122. 买卖股票的最佳时机 II(贪心算法)

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次 ...

  5. LeetCode 122 买卖股票的最佳时机 II

    题目描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一 支股票).注意:你不能同时参与多笔交易(你必 ...

  6. leetcode 122. 买卖股票的最佳时机 II

    难度:中等 频次:35 题目: 给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格. 在每一天,你可能会决定购买和/或出售股票.你在任何时候 最多 只能持有 一股 股票. ...

  7. 106. Leetcode 122. 买卖股票的最佳时机 II (动态规划-股票交易)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i]是一个长度为len(prices)的一维数组,表示的是在第i天持有股票 步骤二.推断状态方程: 第i天持有股票,即dp[i][1], 那么两个状态 ...

  8. leetcode 122 买卖股票的最佳时机II

    贪心算法:如果今天买明天能够盈利,那就今天买入明天卖出:对于这个问题来讲是具有最优子结构性质的 分情况: 1)当len<1:不会赚钱,return 0: 2) class Solution { ...

  9. Leetcode 122. 买卖股票的最佳时机 II 解题思路及C++实现

    解题思路: 采用贪心策略,只要后一天的价格高于前一天,就将差价加进来.得到的结果就是能获取的最大利润. class Solution { public:int maxProfit(vector< ...

  10. 159. Leetcode 122. 买卖股票的最佳时机 II (贪心算法-股票题目)

    class Solution:def maxProfit(self, prices: List[int]) -> int:result = 0for i in range(1,len(price ...

最新文章

  1. activiti部署、执行,完成简单示例
  2. 为什么不应该重写 service 方法?
  3. 深度学习:tensorflow 的整体实现,numpy实现深度学习(三)
  4. IOC--IOC+AOP--热插拔的系统架构实现演化
  5. 同一页面中引入多个JS库产生的冲突解决方案(转)
  6. 我用 Python 集齐了五福
  7. regsvr32.exe进程注册dll文件
  8. C刷题记录-1017
  9. 《电子元器件的可靠性》——3.7节电子元器件失效率鉴定试验
  10. 利用动态数组生成魔方矩阵
  11. codesmith for java_codesmith 入门介绍【转载】
  12. qemu: usb存储设备仿真
  13. ftp服务器有哪些作用,FTP是什么意思 FTP服务器有什么作用及功能
  14. 达梦数据库——Oracle到达梦数据迁移
  15. vue 循环勾选框_Vue学习笔记-遍历el-checkbox
  16. 基于java的坦克大战游戏
  17. JavaFX报错:Class FIFinderSyncExtensionHost is implemented in both
  18. IP-Guard禁止客户端下载或接收exe文件
  19. 拉格朗日乘子库恩塔克条件
  20. Windows server服务篇1:Windows Server 2012R2 AD域控 辅助域 只读域 子域

热门文章

  1. LeetCode 519. 随机翻转矩阵(哈希)
  2. LeetCode 1332. 删除回文子序列
  3. LeetCode 263. 丑数 264. 丑数 II(DP)
  4. LeetCode 1013. 将数组分成和相等的三个部分
  5. gradle 上传jar包_Gradle学习记录014 关于依赖的声明
  6. js 将图片置灰_艾叶灰千万别扔——艾叶灰的神奇功效
  7. python中的死锁
  8. java怎么把数据返回给客户端_将数据从Servlet返回到Java客户端
  9. python方向键控制角色_python方向键控制上下左右代码
  10. 论文浅尝 - ACL2020 | 通过集成知识转换进行多语言知识图谱补全