Leetcode 刷题笔记(二十七) ——动态规划篇之买股票问题(一)

文章目录

  • 系列文章目录
  • 前言
  • 题录
    • 121. 买卖股票的最佳时机
    • 122. 买卖股票的最佳时机 II
    • 714. 买卖股票的最佳时机含手续费

系列文章目录

一、 数组类型解题方法一:二分法
二、数组类型解题方法二:双指针法
三、数组类型解题方法三:滑动窗口
四、数组类型解题方法四:模拟
五、链表篇之链表的基础操作和经典题目
六、哈希表篇之经典题目
七、字符串篇之经典题目
八、字符串篇之 KMP
九、解题方法:双指针
十、栈与队列篇之经典题目
十 一、栈与队列篇之 top-K 问题
十 二、二叉树篇之二叉树的前中后序遍历
十 三、二叉树篇之二叉树的层序遍历及相关题目
十 四、二叉树篇之二叉树的属性相关题目
十 五、 二叉树篇之二叉树的修改与构造
十 六、 二叉树篇之二叉搜索树的属性
十 七、二叉树篇之公共祖先问题
十 八、二叉树篇之二叉搜索树的修改与构造
十 九、回溯算法篇之组合问题
二 十、回溯算法篇之分割、子集、全排列问题
二十一、贪心算法篇之入门题目
二十二、贪心算法篇之进阶题目
二十三、动态规划篇之基础题目
二十四、动态规划篇之背包问题:01背包
二十五、动态规划篇之背包问题:完全背包
二十六、动态规划篇之经典问题:打家劫舍
更新中 …


前言

买股票系列问题都可以使用 dp 解决,而且递推公式大同小异。本文题录买股票问题中,可以不用 dp 解决的三道题。
刷题路线来自 :代码随想录

题录

121. 买卖股票的最佳时机

Leetcode 链接
Leetcode 刷题笔记(二十七) ——动态规划篇之买股票问题(一)_第1张图片
题解:

res: 记录每天最大利润,为前一天的最大利润 和 卖出股票的最大利润中的最大值
low:记录最小买入价格

class Solution {
    public int maxProfit(int[] prices) {
        int res = 0;
        int low = prices[0];
        for (int i = 1; i < prices.length; i++) {
            low = Math.min(low, prices[i]);
            res = Math.max(res, prices[i] - low);
        }
        return res;
    }
}

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

Leetcode 链接
Leetcode 刷题笔记(二十七) ——动态规划篇之买股票问题(一)_第2张图片
题解:
只要每天相对于前一天能盈利就进行买入卖出

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

714. 买卖股票的最佳时机含手续费

Leetcode 链接
Leetcode 刷题笔记(二十七) ——动态规划篇之买股票问题(一)_第3张图片
题解:
在上题的基础上加上了手续费,提高买入价格即可(买入价格加上手续费),买入价格需要加上手续费。
什么时候卖出?如:[1 4 3 100] ,手续费为 2 时 在第 3 天股票价格下跌了,但是不卖,在第4天卖出才能最大获利。

class Solution {
    public int maxProfit(int[] prices, int fee) {
        int sum = 0;
        
        int buy = prices[0] + fee;
        for (int i = 1; i < prices.length; i++) {
            if (prices[i] > buy) {
                sum += prices[i] - buy;
               	// 依然递增,不用从新买入,不需要额外手续费
                buy = prices[i];
            } else if (prices[i] < buy - fee) {
            	// 从新买入,需要额外手续费
                buy = prices[i] + fee;
            }
        }
        return sum;
    }
}

你可能感兴趣的:(算法,leetcode,动态规划,链表)