Leetcode每日一题 2024. 考试的最大困扰度 双指针思想到滑动窗口思想转变应用题

本文主要是介绍Leetcode每日一题 2024. 考试的最大困扰度 双指针思想到滑动窗口思想转变应用题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

📖本篇内容:Leetcode每日一题 2024. 考试的最大困扰度 双指针思想到滑动窗口思想转变应用题

📑 文章专栏:leetcode每日一题《打卡日常》

📆 最近更新:2022 年 3 月 28日 Leetcode每日一题 693. 交替位二进制数 简单遍历/位运算

⭐算法仓库:小付的算法之路——Alascanfu-algorithm.git.io

🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)

🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起

文章目录

  • 🙊写在前面🙊
  • 题目
    • 提示
    • 📝思路📝
    • ⭐代码实现⭐
    • 运行结果
  • 🙊写在最后🙊

🙊写在前面🙊

最近再刷MySQL高级,所以侧重点不在于算法啦,坚持就好~

题目

一位老师正在出一场由 n 道判断题构成的考试,每道题的答案为 true (用 ‘T’ 表示)或者 false (用 ‘F’ 表示)。老师想增加学生对自己做出答案的不确定性,方法是 最大化 有 连续相同 结果的题数。(也就是连续出现 true 或者连续出现 false)。

给你一个字符串 answerKey ,其中 answerKey[i] 是第 i 个问题的正确结果。除此以外,还给你一个整数 k ,表示你能进行以下操作的最多次数:

每次操作中,将问题的正确答案改为 ‘T’ 或者 ‘F’ (也就是将 answerKey[i] 改为 ‘T’ 或者 ‘F’ )。
请你返回在不超过 k 次操作的情况下,最大 连续 ‘T’ 或者 ‘F’ 的数目。

示例1:

输入:answerKey = "TTFF", k = 2
输出:4
解释:我们可以将两个 'F' 都变为 'T' ,得到 answerKey = "TTTT" 。
总共有四个连续的 'T' 。

示例2:

输入:answerKey = "TFFT", k = 1
输出:3
解释:我们可以将最前面的 'T' 换成 'F' ,得到 answerKey = "FFFT" 。
或者,我们可以将第二个 'T' 换成 'F' ,得到 answerKey = "TFFF" 。
两种情况下,都有三个连续的 'F' 。

示例3:

输入:answerKey = "TTFTTFTT", k = 1
输出:5
解释:我们可以将第一个 'F' 换成 'T' ,得到 answerKey = "TTTTTFTT" 。
或者我们可以将第二个 'F' 换成 'T' ,得到 answerKey = "TTFTTTTT" 。
两种情况下,都有五个连续的 'T' 。

提示

  • n == answerKey.length
  • 1 <= n <= 5 ∗ 1 0 4 5 * 10^4 5104
  • a n s w e r K e y [ i ] answerKey[i] answerKey[i] 要么是 ‘T’ ,要么是 ‘F’
  • 1 <= k <= n

📝思路📝

本题考查知识点

  • 思路:如何分析,从哪里入手,是这道题的关键,小付一开始的思路是通过双指针来进行模拟在不超过K次操作的情况下,区间[i,j],最大连续T或者F的数量。i 所指向的的是符合字符串的起点,j是指向符合字符串的终点,我们需要求得 在区间[i,j] 需要修改的字符次数 <= k使得其满足题目要求的最长连续字符字符串。有了上述思路我们就进行简单模拟一下。
  • 初始位置i 为 0 ,j 位置为1 需要分别统计[i,j] 中的T 与 F 的数量便于,当我们需要进行修改时是否满足最少数量修改次数 <= k 这一条件来进行判断。我们分别计做 cntTcntF ,如果最少数量需要修改的字符数量>k 时,我们就需要进行区间缩小,以此来满足约束条件。

⭐代码实现⭐

滑窗应用

class Solution {public int maxConsecutiveAnswers(String answerKey, int k) {// 初始化双指针的位置int i = 0;int j = 1;// 用于记录当前区间[i,j]内T与F的数量int cntT = 0;int cntF = 0;int n = answerKey.length();char[] keys = answerKey.toCharArray();// 初始化 其实可以直接 将 j 位置也初始化为 0 这样这一步就省略了,但是为了更加清晰直白一点,就多了这一步。if (keys[0] == 'T'){cntT++;}else {cntF++;}while (j < n){// 统计区间中的T与F的数量if (keys[j] == 'T'){cntT++;}else {cntF++;}// 满足最少数量修改次数的字符修改int curNeedModifyKeysCnt = Math.min(cntF,cntT);// 如果此时的最少数量次数的字符修改都要大于k//则说明此时区间中出现了k+1个需要删除的字符//所以此时我们需要缩小区间,使得最少数量修改依旧满足k个if (curNeedModifyKeysCnt > k){if (keys[i] == 'T')cntT--;else if (keys[i] == 'F')cntF--;i++;}j++;}// 返回符合条件的最大区间中字符的个数return j  - i ;}
}
  • 时间复杂度: O( n n n)
  • 空间复杂度: O( 1 1 1)

运行结果

滑动窗口:

在这里插入图片描述

🙊写在最后🙊

2022-3 - 29今天小付打卡了哦~

美好的日出 美好的山河

都因有你存在 而璀璨 耀眼

在这里插入图片描述

这篇关于Leetcode每日一题 2024. 考试的最大困扰度 双指针思想到滑动窗口思想转变应用题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/365921

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

hdu 2093 考试排名(sscanf)

模拟题。 直接从教程里拉解析。 因为表格里的数据格式不统一。有时候有"()",有时候又没有。而它也不会给我们提示。 这种情况下,就只能它它们统一看作字符串来处理了。现在就请出我们的主角sscanf()! sscanf 语法: #include int sscanf( const char *buffer, const char *format, ... ); 函数sscanf()和

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

poj 3723 kruscal,反边取最大生成树。

题意: 需要征募女兵N人,男兵M人。 每征募一个人需要花费10000美元,但是如果已经招募的人中有一些关系亲密的人,那么可以少花一些钱。 给出若干的男女之间的1~9999之间的亲密关系度,征募某个人的费用是10000 - (已经征募的人中和自己的亲密度的最大值)。 要求通过适当的招募顺序使得征募所有人的费用最小。 解析: 先设想无向图,在征募某个人a时,如果使用了a和b之间的关系

poj 3258 二分最小值最大

题意: 有一些石头排成一条线,第一个和最后一个不能去掉。 其余的共可以去掉m块,要使去掉后石头间距的最小值最大。 解析: 二分石头,最小值最大。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <c