秋招突击——算法打卡——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 );
        // 重置并重新移动l
        while(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 );
        // 重置并重新移动l
        while(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)
  • 今天还不错,继续加油。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据挖掘】学习笔记

文章目录 第一章 引论1.1 为什么进行数据挖掘1.2 什么是数据挖掘&#xff1f;1.3 可以挖掘什么类型的数据1.4 可以挖掘什么类型的模式1.4.1 类/概念描述&#xff1a;特征化和区分1.4.2 挖掘频繁模式、关联规则和相关性1.4.3 用于预测分析的分类和回归1.4.4 聚类分析1.4.5 离群点…

【C语言之排序】-------六大排序

作者主页&#xff1a;作者主页 数据结构专栏&#xff1a;数据结构 创作时间 &#xff1a;2024年5月18日 前言&#xff1a; 今天我们就给大家带来几种排序的讲解&#xff0c;包括冒泡排序&#xff0c;插入排序&#xff0c;希尔排序&#xff0c;选择排序&#xff0c;堆排序&…

计算机网络ppt和课后题总结(下)

常用端口总结 计算机网络中&#xff0c;端口是TCP/IP协议的一部分&#xff0c;用于标识运行在同一台计算机上的不同服务。端口号是一个16位的数字&#xff0c;范围从0到65535。通常&#xff0c;0到1023的端口被称为“熟知端口”或“系统端口”&#xff0c;它们被保留给一些标准…

【Python数据类型的奥秘】:构建程序基石,驾驭信息之海

文章目录 &#x1f680;Python数据类型&#x1f308;1. 基本概念⭐2. 转化&#x1f44a;3. 数值运算&#x1f4a5;4. 数值运算扩展(math库常用函数) &#x1f680;Python数据类型 &#x1f308;1. 基本概念 整数&#xff08;int&#xff09;&#xff1a;整数是没有小数部分的数…

保研面试408复习 8——计算机网络(浏览器http)、离散数学(平面图)、操作系统、数据结构

文章目录 一、计算机网络1、从在浏览器输入网址到页面显示的过程1. 输入网址2. DNS 解析3. 建立TCP连接4. 发送HTTP请求5. 服务器处理请求并响应6. 浏览器处理响应7. 页面渲染 二、离散数学一、平面图1、平面图性质2、Kuratowski定理 三、操作系统四、数据结构 一、计算机网络 …

Unity3d使用3D WebView for Windows and macOS打开全景网页(720云)操作问题记录

问题描述 使用Unity3d内嵌网页的形式打开720云中的全景图这个功能&#xff0c;使用的是3D WebView for Windows and macOS插件&#xff0c;720云的全景图在浏览器上的操作是滑动鼠标滚轮推远/拉近全景图&#xff0c;鼠标左键拖拽网页可以旋转全景图内容。网页的打开过程是正常…

CSS函数:scale、scale3d函数的使用

CSS函数scale()主要是为了实现元素的放大和缩小效果&#xff0c;使用的是元素的变换效果。使用的是元素的转换属性&#xff1a;transform的&#xff0c;该函数可以实现指定X轴和Y轴的放大、缩小效果。除此之外&#xff0c;我们还可以通过如下两种方式实现指定方向的转换&#x…

C++结合OpenCV进行图像处理与分类

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

选择排序-Java版本

选择排序 算法的思想&#xff1a;java模拟 算法的思想&#xff1a; 每遍历一次就找一个最小的数 *外层 一共遍历 length-1次 总遍历次数符合等差数列 时间复杂度为O(n^2)内部查找 并 返回 数值 和 下标 java模拟 public static void selectSort(int[] arr) {for(int i 0;i<…

Flask 学习笔记 总结

python基础 服务端开发编程 第一个是赋值运算&#xff0c;第二是乘法&#xff0c;最后是一个是幂&#xff08;即a2&#xff09; a 2 a * 2 a ** 2 Python支持多重赋值&#xff1a; a, b, c 2, 3, 4 这句命令相当于&#xff1a; a 2 b 3 c 4 Python支持对字符串的灵活…

网络编程(一)

网络编程&#xff08;一&#xff09; 网络基础网络体系结构**OSI的7层模型**&#xff1a;&#xff08;理想化&#xff09;**每层的功能** **TCP/IP的4层模型**&#xff1a;&#xff08;在使用&#xff09;常见的协议IP地址IPV4分类A类&#xff08;第1位固定为0&#xff09;B类&…

10个令人惊叹的Python自动化脚本

大家好&#xff0c;Python凭借其简单和通用性&#xff0c;能够为解决每天重复同样的工作提供最佳方案。本文将介绍10个Python自动化脚本&#xff0c;可以帮助自动化完成任务&#xff0c;提高工作效率&#xff0c;它们可以成为项目运行中的便捷工具&#xff0c;可以收藏这些脚本…

conflicting types for 错误问题

操作系统真象还原中&#xff0c;第十一章出现的问题&#xff1a; 怎样编译都会出现一个conflicting types for ’xxx‘的错误 出现这个错误的原因&#xff1a; 头文件声明和定义参数稍有不同 头文件中声明 void Hanlder(const char * buf); 在定义时写作 void Hanlder(char…

C# WPF入门学习主线篇(六)—— TextBox常见属性和事件

欢迎回到C# WPF入门学习系列的第六篇。在前面的文章中&#xff0c;我们探讨了按钮&#xff08;Button&#xff09;的事件处理。今天&#xff0c;我们将继续学习另一个常用的WPF控件——TextBox。本文将介绍 TextBox 的常见属性和事件&#xff0c;并通过示例代码展示如何在实际应…

用这个AI工具,做公众号爆款图文,5分钟一篇10w+,居然这么简单!(附工具教程)

文章首发于公众号&#xff1a;X小鹿AI副业 大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~ 之前X小鹿一直在各…

泵制造5G智能工厂工业物联数字孪生可视化,推进制造业数字化转型

泵制造5G智能工厂工业物联数字孪生可视化&#xff0c;推进制造业数字化转型。泵制造行业&#xff0c;作为工业领域的核心部分&#xff0c;更是急需通过技术创新实现生产流程的智能化和高效化。而5G智能工厂工业物联数字孪生可视化技术的出现&#xff0c;为泵制造业的数字化转型…

代码随想录算法训练营第四十四天 | 01背包问题理论基础、01背包问题滚动数组、416. 分割等和子集

背包问题其实有很多种&#xff0c;01背包是最基础也是最经典的&#xff0c;软工计科学生一定要掌握的。 01背包问题 代码随想录 视频讲解&#xff1a;带你学透0-1背包问题&#xff01;| 关于背包问题&#xff0c;你不清楚的地方&#xff0c;这里都讲了&#xff01;| 动态规划经…

YOLO10:手把手安装教程与使用说明

目录 前言一、YOLO10检测模型二、YOLO安装过程1.新建conda的环境 yolo10安装依赖包测试 总结 前言 v9还没整明白&#xff0c;v10又来了。而且还是打败天下无敌手的存在&#xff0c;连最近很火的RT-DETR都被打败了。那么&#xff0c;笑傲目标检测之林的v10又能持续多久呢&#…

2024第三届全国大学生数据分析大赛,有没有没有思路的朋友?

大家好呀&#xff0c;2024第三届全国大学生数据分析大赛准备开始咯&#xff0c;大家是不是没有思路呀。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 比赛现在还能报名哈&#xff01;6-7才截…

图像背景去除工具:removebg

文章目录 简介面向不同用户价格 简介 removebg&#xff0c;就是remove background&#xff0c;是一款智能图片背景去除工具。 在免费使用时&#xff0c;用到的是本地的CPU。我第一次试用时&#xff0c;图片刚上传之后&#xff0c;电脑的帧率便直线下降&#xff0c;鼠标都拖不…