代码随想录打卡Day41

最近事情好多。。全堆一块了,今天先写两题吧,剩下一题明天解决。

121. 买卖股票的最佳时机

这道题纯不会,不知道该怎么构造dp数组,更不知道dp数组的含义,看完讲解以后感觉这样的dp数组构造还挺巧妙的,第一次见这样构造dp数组的。这道题的循环中需要同时维护两个状态,一种是第i天保持持有股票状态时的最大收益(不一定是在第i天买入,有可能在之前就买入了),一种是第i天保持未持有股票状态时的最大收益(不一定是在第i天卖出,也有可能是在之前就已经卖出了),这样定义两个状态就把所有状态都包含了,由于这道题只能买卖一次股票,所以状态转移很简单:
1.当第i天持有股票时
如果在第i天之前就已经买入股票了,那么第i天仍然持有股票,则获得的收益已经被定死,就与前一天持有股票的收益是相同的,因为持有股票而不卖出的话,收益一直都是负数(购买股票需要花钱,收益就是买入当天股票价格的负数);如果是第i天当天买入的股票,则当天的收益为-prices[i](买股票的成本)。将两种情况作比较取较大值,只要当天的价格相比于之前的价格高,那么当天买入的收益一定不是最大的,收益最大化的必要条件之一是购入股票的成本尽可能低。
2.当第i天未持有股票时
如果第i天之前就已经卖出股票,那么后序也就不能再买卖股票,属于是买定离手,不能反悔了,后面的收益也就不再变动,和前一天未持有股票的收益相同;如果是第i天才把股票卖出,则前一天必然是持有股票的状态,直接将前一天持有股票的最大收益(此前购买股票的最低成本)与当天股票价格相加即可,收益最大化的另一必要条件之一是卖出股票的价格尽可能高。
了解了dp数组的具体含义,初始化也很好办了。

class Solution {
public:int maxProfit(vector<int>& prices) {//1.确定dp[i][0]的含义:第i天保持持有股票情况下,所能获得的最大收益为dp[i][0]//      dp[i][1]的含义:第i天未持有股票的情况下,所能获得的最大收益为dp[i][1]//2.确定递推公式dp[i][0] = max(dp[i - 1][0], -prices[i]);//             dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i])//3.dp数组初始化 dp[0][0] = -prices[0], dp[0][1] = 0;//4.确定遍历顺序:从小到大遍历//5.打印数组(省略)int m = prices.size();vector<vector<int>> dp(m, vector<int> (2));//初始化dp[0][0] = -prices[0];dp[0][1] = 0;for(int i = 1; i < m; i++){dp[i][0] = max(dp[i - 1][0], -prices[i]);dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]);}return dp[m - 1][1];}
};

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

这道题比上一道题略难一点,但是思路大同小异,这道题与上一道题的区别在于这道题可以买卖多次股票。在代码实现中区别体现在哪里呢?主要是体现在递推公式上。
1.当第i天持有股票时
若是在第i天之前买入了股票,则在上一次买入股票之前可能还涉及多次股票买卖操作,因此在最近一次买入股票后,收益未必是负数(此前可能通过多次买卖股票实现了盈利),至少在第i - 1天依然是持有股票的状态,所以这种情况下的最大收益为dp[i - 1][0];若在第i天买入了股票,则第i - 1天必然是未持有股票的状态,因此这种情况下的最大收益是dp[i - 1][1] - prices[i];两者取较大值即可。
2.当第i天未持有股票时
若在第i天之前就已经是未持有状态(可能从未买过,也可能已经卖出),则至少在i - 1天也处于未持有状态,则这种情况下第i天的最大收益应当与第i - 1天的最大收益持平;若在第i天才卖出股票,则第i - 1天必然是持有股票的状态,则用第i - 1持有股票的最大收益加上第i天的股票价格即可。
除了递推公式上有细微差别外,其余地方完全相同。

class Solution {
public:int maxProfit(vector<int>& prices) {//1.确定dp[i][0]的含义:第i天保持持有股票情况下,所能获得的最大收益为dp[i][0]//      dp[i][1]的含义:第i天未持有股票的情况下,所能获得的最大收益为dp[i][1]//2.确定递推公式dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);//             dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i])//3.dp数组初始化 dp[0][0] = -price[0], dp[0][1] = 0;//4.确定遍历顺序:从小到大遍历//5.打印数组(省略)int m = prices.size();vector<vector<int>> dp(m, vector<int> (2));//初始化dp[0][0] = -prices[0];dp[0][1] = 0;for(int i = 1; i < m; i++){dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]);}return dp[m - 1][1];}
};

实在是太累了,明天再说。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/54590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt --- 常用控件的介绍 --- 其他控件

一、QPushButton QWidget中设计到的各种属性/函数/使用方法&#xff0c;针对接下来要介绍的Qt的各种控件都是有效的。 使用QPushButton表示一个按钮&#xff0c;这也是当前我们最熟悉的一个控件了。这个类继承了QAbstractButton&#xff0c;这个类是一个抽象类&#xff0c;是…

C++自动驾驶面试核心问题整理

应用开发 概述&#xff1a;比较基础&#xff0c;没啥壁垒&#xff0c;主要有linux开发经验即可 问题&#xff1a;基础八股&#xff0c;如计算机网络、操作系统、c11等基础三件套&#xff1b;中等难度算法题1-2道。 中间件开发&#xff08;性能优化&#xff09; 概述&am…

Set 和 Map 的模拟实现

1、引言 在数据结构与算法的学习与实践中&#xff0c;关联容器&#xff08;associative containers&#xff09;是不可忽视的重要工具。作为高效管理数据的一类容器&#xff0c;C 标准库中的 set 和 map 在现代软件开发中扮演着关键角色。这两个容器通过平衡二叉搜索树&#x…

【通讯协议】S32K142芯片——LIN通信的学习和配置

文章目录 前言1.LIN是什么&#xff1f;2. LIN连接结构及节点构成3. 帧的组成3.1 帧头3.1.1 同步间隔场&#xff08;Break&#xff09;3.1.2 同步场&#xff08;Synch&#xff09;3.1.3 标识符场&#xff08;PID&#xff09; 3.2 帧响应3.2.1 数据场3.2.2 校验和场 3. 代码配置总…

leetcode热题100.最长回文子串(动态规划解法)

题目 5. 最长回文子串 - 力扣&#xff08;LeetCode&#xff09; 给你一个字符串 s&#xff0c;找到 s 中最长的 回文子串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同样是符合题意的答…

【图灵完备 Turing Complete】游戏经验攻略分享 Part.6 处理器架构2 函数

新的架构来了&#xff0c;本游戏的最后一个攻略分享&#xff0c;最后汇编部分无非是对于操作码的熟练&#xff0c;硬件没有问题&#xff0c;那么也就无关痛痒了。 汇编实现&#xff0c;两数相或和两数相与非一起相与即可。 八位异或器&#xff0c;整就完事了。 有手就行。 利…

設置Android設備全局代理

全局代理是指在設備上設置一個代理伺服器&#xff0c;使所有的網路請求都通過這個代理伺服器進行轉發。這樣&#xff0c;無論你使用的是哪款應用&#xff0c;所有的網路流量都會經過代理伺服器&#xff0c;從而實現統一的網路訪問控制和隱私保護。 配置Wi-Fi網路代理 在Andro…

干货满满:嵌入式电阻的重要作用全知晓

在嵌入式开发中&#xff0c;有一个小小的元件&#xff0c;它看似不起眼&#xff0c;却在电路中扮演着极其重要的角色。它就是——电阻。很多初学者认为电阻只是用来“分压降流”&#xff0c;但其实&#xff0c;电阻的作用远比我们想象的要复杂和关键。今天&#xff0c;我们就来…

Pyecharts在数据可视化大屏中的应用与实践

Pyecharts在数据可视化大屏中的应用与实践 在大数据时代&#xff0c;数据可视化已成为企业决策、业务分析不可或缺的一环。而数据大屏&#xff0c;作为数据可视化的高端表现形式&#xff0c;不仅能够实时展示关键业务指标&#xff0c;还能通过丰富的图表和动态效果&#xff0c…

LeetCode 2374.边积分最高的节点:模拟

【LetMeFly】2374.边积分最高的节点&#xff1a;模拟 力扣题目链接&#xff1a;https://leetcode.cn/problems/node-with-highest-edge-score/ 给你一个有向图&#xff0c;图中有 n 个节点&#xff0c;节点编号从 0 到 n - 1 &#xff0c;其中每个节点都 恰有一条 出边。 图…

TM-align蛋白质聚类数据格式转化

TM-align 对蛋白质结构中的序列进行同源性聚类分析的结果格式如下&#xff1a; 8p0k_H 8p0k_H 8p0k_H 8p0n_H 8p0k_H 8p0j_H 8p0v_M 8p0v_M 8p0y_O 8p0y_O 8p0y_O 8p10_O 8p0y_O 8p0y_A 8p0y_O 8p10_D 8p0y_O 8p24_V 8p0y_O 8p24_Z 其中&#xff0c;第一列为聚类的代表序列&a…

思科安全网络解决方案

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

【门牌制作 / A】

题目 代码 #include <bits/stdc.h> using namespace std; int main() {int cnt 0;for (int i 1; i < 2020; i){string s;s to_string(i);cnt count(s.begin(), s.end(), 2);}cout << cnt; }

【C++篇】走进C++标准模板库:STL的奥秘与编程效率提升之道

文章目录 C STL 初探&#xff1a;打开标准模板库的大门前言第一章: 什么是STL&#xff1f;1.1 标准模板库简介1.2 STL的历史背景1.3 STL的组成 第二章: STL的版本与演进2.1 不同的STL版本2.2 STL的影响与重要性 第三章: 为什么学习 STL&#xff1f;3.1 从手动编写到标准化解决方…

【论文速看】DL最新进展20240923-长尾综述、人脸防伪、图像分割

目录 【长尾学习】【人脸防伪】【图像分割】 【长尾学习】 [2024综述] A Systematic Review on Long-Tailed Learning 论文链接&#xff1a;https://arxiv.org/pdf/2408.00483 长尾数据是一种特殊类型的多类不平衡数据&#xff0c;其中包含大量少数/尾部类别&#xff0c;这些类…

tomcat服务搭建部署ujcms网站

tomcat服务搭建部署ujcms网站 关闭selinux和防火墙 setenforce 0 && systemctl stop firewalld安装java环境 #卸载原有java8环境 yum remove java*#上传java软件包&#xff0c;并解压缩 tar -xf openjdk-11.0.1_linux-x64_bin.tar.gz && mv jdk-11.0.1 jdk11…

docker 镜像,导入导出,

dockers镜像传输&#xff1a;docker save和docker load命令的使用_docker save -o-CSDN博客 docker save 命令 docker load 命令 快速复制容器-CSDN博客 创建docker容器报错:Error response from daemon: No command specified-CSDN博客 Docker 镜像移动或复制到另一台服务器_d…

了解函数式编程:从表象到本质,从技法到心法

今天看到&#xff0c;《代码整洁之道》&#xff08;Clean Code&#xff09;和《架构整洁之道》&#xff08;Clean Architecture&#xff09;的作者Robert C. Martin在讨论函数式编程时曾提到&#xff1a; 函数式编程不仅仅是“用函数编程”。函数式编程是没有赋值语句的编程。 …

TaskRes: Task Residual for Tuning Vision-Language Models

文章汇总 当前VLMs微调中存在的问题 提示微调的问题 在提示调优中缺乏对先验知识保存的保证(me&#xff1a;即提示微调有可能会丢失预训练模型中的通用知识)。虽然预先训练的文本分支模块(如文本编码器和投影)的权重在提示调优范式中被冻结&#xff0c;但原始的良好学习的分类…

BUUCTF-MISC-荷兰宽带数据泄露

下载附件得到一个二进制文件 通过题目猜测这是一段路由器备份日志&#xff0c;可以使用RouterPassView打开 链接: https://pan.baidu.com/s/1tY5Sdl8GcI5dKQdhPXj5yA?pwdhi9k 下载链接http://pan.baidu.com/s/1tY5Sdl8GcI5dKQdhPXj5yA?pwdhi9k注意&#xff0c;这个软件会报毒…