系列文章目录
一、 数组类型解题方法一:二分法
二、数组类型解题方法二:双指针法
三、数组类型解题方法三:滑动窗口
四、数组类型解题方法四:模拟
五、链表篇之链表的基础操作和经典题目
六、哈希表篇之经典题目
七、字符串篇之经典题目
八、字符串篇之 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;
}
}