秋招突击——算法打卡——6/5——提高{(状态机模型)股票买卖、(单调队列优化DP)最大子序列和}——新做:{考试的最大困扰度}

文章目录

    • 提高
      • (状态机模型)股票买卖IV
        • 思路分析
        • 实现代码
        • 参考代码
    • 新作
      • 考试的最大困扰度
        • 个人实现
        • 参考思路
    • 总结

提高

(状态机模型)股票买卖IV

  • 上一次的思路总结,上次写的时候忘记总结了,现在重新画一下图
  • 在这里插入图片描述
思路分析
  • 这道题是一个经典的状态机模型,具体分析如下,两种做状态以及对应的转换形式。
    请添加图片描述
实现代码
  • 一写代码就懵逼,不知道怎么定义边界值,是从零开始还是从一开始,要不要给边界赋值?都不知道,得找一个方法,一块解决掉。
  • 忘记怎么用memset,需要好好整理一下。
    • memset是来自cstring的
    • memset(ptr,value,sizeof())
  • 写成了下面这样
#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;const int N = 10010;
const int K = 110;
int w[N],k,n;
int f[N][K][2];int main(){cin>>n>>k;for (int i = 0; i < n; ++i) {cin>>w[i];}// 遍历所有的边界进行赋值memset(f, 0, sizeof(f));
//    for (int i = 0; i <= k; ++i) {
//        f[0][k][0]  = 0;
//        f[0][k][1]  = 0;
//    }
//    // 遍历所有零次交易的情况
//    for (int i = 0; i <= n; ++i) {
//        f[k][0][0] = 0;
//        f[k][0][1] = 0;
//    }for (int i = 1; i <= n; ++i) {for (int j = 1; j <= k; ++j) {f[i][j][0] = max(f[i - 1][k][0] , f[i - 1][k][1] + w[i]);f[i][j][1] = max(f[i - 1][k][1] , f[i - 1][k-1][0] - w[i]);}}cout<<max(f[n][k][0],f[n][k][1])<<endl;
}
参考代码
  • 大体是一样,但是有两个问题,分别
    • 最大值的确定
      • 最后肯定是全部都卖光的情况,手里没有持有股票才对,所以只需要比价状态0就行了
      • 最后有可能交易次数没有用光,所以可能要遍历最后一天所有交易次数的情况
  • 关于初始化的问题
    • 因为有可能 是负数,所以最开始的初始值要是最小的。
    • 因为再交易过程中,交易天数会为0,同时交易次数也会为0,因为都存在-1的情况,所以要对两者进行判定
      • 在第零天第零次交易的情况下,自身的收益本身就是0,存在f[i-1][j-1][0]的情况
#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;const int N = 10010;
const int K = 110;
int w[N],k,n;
int f[N][K][2];int main(){cin>>n>>k;for (int i = 0; i < n; ++i) {cin>>w[i];}// 遍历所有的边界进行赋值memset(f, INT_MIN, sizeof(f));for (int i = 0; i <= n; ++i) {f[i][0][0] = 0;}for (int i = 1; i <= n; ++i) {for (int j = 1; j <= k; ++j) {f[i][j][0] = max(f[i - 1][k][0] , f[i - 1][k][1] + w[i]);f[i][j][1] = max(f[i - 1][k][1] , f[i - 1][k-1][0] - w[i]);}}int res = 0;for (int i = 0; i <= k; ++i) {res = max(res, f[n][i][0]);}cout<<res<<endl;
}

新作

考试的最大困扰度

  • 题目链接
个人实现
  • 最直白的思路,统计一下所有的相同的T或者F的数量,然后将之转成数字,就变成了52146
  • 改变其中某一个数字,形成新的序列,然后比如说选中2,最终就变成了846.然后在选择其中的最大值。最为输出
  • 这样的话情况太多了,遍历的情况太多了,不好弄。
  • 序列问题,使用双指针?
  • 左边指针固定,右边指针向右进行遍历,如果相同就不改变k,如果不同就改变k,然后知道返回最终结果为止。
class Solution {
public:int maxConsecutiveAnswers(string s, int k) {int n = s.size(),kTemp = k;int res = 0;for (int l = 0; l < n;l ++) {int r = l+1;while(r < n && (s[l] == s[r] || kTemp > 0)){if (s[l] != s[r]){kTemp --;}r ++;}res = max(res,r - l );// 重置并重新移动lwhile(l + 1 < n && s[l] == s[l + 1]) l++;kTemp = k;}kTemp = k;for ( int r = n - 1; r >= 0;r --) {int l = r - 1;while(l >= 0 && (s[l] == s[r] || kTemp > 0)){if (s[l] != s[r]){kTemp --;}l --;}res = max(res,r - l );// 重置并重新移动lwhile(r - 1 >= 0 && s[r] == s[r - 1]) r --;kTemp = k;}return res;
}
};
  • 就算再来一遍,双指针,还是只能通过60个样例,不够。
    在这里插入图片描述
参考思路
  • 这道题我们用的思路是一致的,不过他是将这个问题分开,也是使用双指针的,但是是分别计算最长的F的序列和最长的T序列,然后再求两个最大值。
  • 思路变化
    • sum表示区间中非目标值的字符个数
      • sum < k:说明可以使用的k个操作进行翻转
      • sum > k:说明不能使用的k个操作进行反转,这里要不断移动j,减少不合法的字符的个数。
  • 其中第二段的思路我没有意识到,我这里做错了,我这里是直接移动到第一个与当前符号不一样的字符那里,是一个问题。
  • 这个模板好好记一下!
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;int maxConsecutiveAnswers1(string s, int k,char t) {int n = s.size();int res = 0;for (int l = 0,r = 0,sum = 0; r < n;r ++) {if (s[r] != t)  sum ++;while(sum > k){if (s[l] != t) sum --;l ++;}res = max(res , r - l + 1);}return res;
}int maxConsecutiveAnswers(string s,int k){return max(maxConsecutiveAnswers1(s,k,'F'),maxConsecutiveAnswers1(s,k,'T'));
}int main(){cout<<maxConsecutiveAnswers("TTFF",2)<<endl;
}

总结

  • 关于状态机模型,大概写对了,但是没有抓住精髓,还是对于边界的初始化有问题,不过这次有点意识了。
    • 除了根据实际意义来看,0次操作的情况下,就是没有任何收益
    • 凡是存在了-1的情况的话,都需要进行初始化,防止访问0的边界
  • memset,是来自于cstring,无论是几个维度的数据,都是使用的f + sizeof(f)
  • 今天还不错,继续加油。

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

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

相关文章

用动态IP采集数据总是掉线是为什么?该怎么解决?

动态IP可以说是做爬虫、采集数据、搜集热门商品信息中必备的代理工具&#xff0c;但在爬虫的使用中&#xff0c;总是会遇到动态IP掉线的情况&#xff0c;从而影响使用效率&#xff0c;本文将探讨动态IP代理掉线的几种常见原因&#xff0c;并提供解决方法&#xff0c;以帮助大家…

牛客网刷题 | BC119 最高分与最低分之差

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 输入n个成绩&#…

CleanMyMac2025破解版crack+keygen

【CleanMyMac】这款神奇的软件&#xff0c;让我彻底告别了电脑卡顿的困扰&#xff01;&#x1f62e;‍&#x1f4a8; CleanMyMac绿色免费版下载如下&#xff1a;记得保存哈&#xff0c;以防失效&#xff1a; https://pan.quark.cn/s/9b08114cf404 CleanMyMac X2024全新版下载…

指针(初阶2)“野指针以及指针运算”

目录 一.野指针 二.如何避免野指针 三.指针运算 1、指针&#xff08;-&#xff09;整数 2、指针 - 指针 3、指针关系运算 小编在这里声明一下&#xff0c;将某一块的知识点分为上中下或者1&#xff0c;2&#xff0c;3来编写不是为了增加小编的文章总量&#xff0c;也不是故意这…

279 基于matlab的粒子群集法对铁路电能质量控制系统的容量避行优化设计

基于matlab的粒子群集法对铁路电能质量控制系统的容量避行优化设计。计算出满足功率因素、电压不平衡度等电能指标的条件下。RPC所需要的补偿功率。求得所需最小的系统客量。该设计能快速计算出符合系统设定指标的各项最优补偿功率。并通过sumulink份真。检验设计参数的准确性。…

泛微开发修炼之旅--13通过Ecology拦截器(注解的方式),拦截后端接口,实现接口执行成功后或执行前操作源码示例

文章链接&#xff1a;泛微开发修炼之旅--13通过Ecology拦截器(注解的方式)&#xff0c;拦截后端接口&#xff0c;实现接口执行成功后或执行前操作源码示例

R语言探索与分析20-北京市气温预测分析

一、序言 近年来&#xff0c;人类大量燃烧煤炭、天然气等含碳燃料导致温室气 体过度排放&#xff0c;大量温室气体强烈吸收地面辐射中的红外线&#xff0c;造 成温室效应不断累积&#xff0c;使得地球温度上升&#xff0c;造成全球气候变暖。气象温度的预测一直以来都是天气预…

C语言详解(结构体)

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#xff0c;在这里撰写成文一…

网关API(SpringCloudGateway)如何自定义Filter

1.前言 SpringCloud 虽然给我们提供了很多过滤器&#xff0c;但是这些过滤器功能都是固定的&#xff0c;无法满足用户的各式各样的需求。因此SpringCloud提供了过滤器的扩展功能自定过滤器。 开发者可以根据自己的业务需求自定义过滤器。 2. 自定义 GatewayFilter(局部过滤器)…

微信小程序 画布canvas

属性说明 属性类型默认值必填说明最低版本typestring否指定 canvas 类型&#xff0c;支持 2d (2.9.0) 和 webgl (2.7.0)2.7.0canvas-idstring否canvas 组件的唯一标识符&#xff0c;若指定了 type 则无需再指定该属性1.0.0disable-scrollbooleanfalse否当在 canvas 中移动时且…

【Python】解决Python报错:KeyError: ‘username‘

​​​​ 文章目录 引言1. 错误详解2. 常见的出错场景2.1 用户输入处理错误2.2 动态数据源 3. 解决方案3.1 使用 get() 方法3.2 检查键是否存在 4. 预防措施4.1 数据验证4.2 使用默认字典 (defaultdict) 结语 引言 在Python开发中&#xff0c;处理字典时遇到 KeyError 是一种…

Elastic 8.14:用于简化分析的 Elasticsearch 查询语言 (ES|QL) 正式发布

作者&#xff1a;来自 Elastic Brian Bergholm 今天&#xff0c;我们很高兴地宣布 Elastic 8.14 正式发布。 什么是新的&#xff1f; 8.14 版本最重要的标题是 ES|QL 的正式发布(GA)&#xff0c;它是从头开始设计和专门构建的&#xff0c;可大大简化数据调查。在新的查询引擎的…

Mac环境下,简单反编译APK

一、下载jadx包 https://github.com/skylot/jadx/releases/tag/v1.4.7 下载里面的这个&#xff1a;下载后&#xff0c;找个干净的目录解压&#xff0c;我是放在Downloads下面 二、安装及启动 下载和解压 jadx&#xff1a; 下载 jadx-1.4.7.zip 压缩包。将其解压到你希望的目…

【数据结构】排序——插入排序,选择排序

前言 本篇博客我们正式开启数据结构中的排序&#xff0c;说到排序&#xff0c;我们能联想到我之前在C语言博客中的冒泡排序&#xff0c;它是排序中的一种&#xff0c;但实现效率太慢&#xff0c;这篇博客我们介绍两种新排序&#xff0c;并好好深入理解排序 &#x1f493; 个人主…

HC-SR505人体感应灯

1硬件 1.1硬件组成 1.正点原子探索者开发板 2 HC-SR505迷你小型人体感应模块 3 继电器&#xff0b;5V小灯 HC-SR505迷你小型人体感应模块介绍 1.2 硬件连接 1.HC-SR505&#xff08;连接在PE0&#xff09; 2.继电器&#xff08;连接在PE1&#xff09; 2.主要代码 int ma…

【nerf】nvidia-smi

当cmd下nvidia -smi不能使用时候 沿着以下路径打开cmd&#xff0c;再输入&#xff0c;可以查看cuda版本 然后查看电脑安装的

【QT5】<总览五> QT多线程、TCP/UDP

文章目录 前言 一、QThread多线程 二、QT中的TCP编程 1. TCP简介 2. 服务端程序编写 3. 客户端程序编写 4. 服务端与客户端测试 三、QT中的UDP编程 1. UDP简介 2. UDP单播与广播程序 前言 承接【QT5】&#xff1c;总览四&#xff1e; QT常见绘图、图表及动画。若存在…

二叉树—leetcode

前言 本篇博客我们来仔细说一下二叉树二叉树的一些OJ题目 请看完上一篇&#xff1a;数据结构-二叉树-CSDN博客 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;LeetCode_普通young man的博客-CSDN博客 若有问题 评论区见&#x1f4dd; &…

Llama模型家族之Stanford NLP ReFT源代码探索 (四)Pyvene论文学习

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

音视频转为文字SuperVoiceToText

音视频转为文字SuperVoiceToText&#xff0c;它能够把视频或语音文件高效地转换为文字&#xff0c;它是基于最为先进的 AI 大模型&#xff0c;通过在海量语音资料上进行训练学习而造就&#xff0c;具备极为卓越的识别准确率。 不仅如此&#xff0c;它支持包括汉语、英语、日语…