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

系列文章目录

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


前言

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

题录

121. 买卖股票的最佳时机

Leetcode 链接
在这里插入图片描述
题解:

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 链接
在这里插入图片描述
题解:
只要每天相对于前一天能盈利就进行买入卖出

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 链接
在这里插入图片描述
题解:
在上题的基础上加上了手续费,提高买入价格即可(买入价格加上手续费),买入价格需要加上手续费。
什么时候卖出?如:[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;
    }
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值