当前位置: 首页 > news >正文

【Leetcode:2024. 考试的最大困扰度 + 滑动窗口】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 滑动窗口
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 2024. 考试的最大困扰度

⛲ 题目描述

一位老师正在出一场由 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 * 104
answerKey[i] 要么是 ‘T’ ,要么是 ‘F’
1 <= k <= n

🌟 求解思路&实现代码&运行结果


⚡ 滑动窗口

🥦 求解思路
  1. 该题通过滑动窗口来求解,具体求解算法如下:
  2. 遍历字符串,枚举子串右端点 right,同时维护最小左端点 left ,通过词频表中维护子串中字符的个数。
  3. 如果 T 和 F 的出现次数都超过 k,那么必须不断移动左端点 left,同时减少 词频表中字符串的出现次数,直到 T 和 F 的出现次数至少有一个 ≤k。
  4. 循环结束后,说明子串右端点在 right 时,对应的最小左端点为 left,用子串长度 right−left+1 更新答案的最大值。
  5. 有了基本的思路,接下来我们就来通过代码来实现一下的解法。
🥦 实现代码
class Solution {public int maxConsecutiveAnswers(String answerKey, int k) {char[] s = answerKey.toCharArray();int ans = 0;int left = 0;int[] cnt = new int[2];for (int right = 0; right < s.length; right++) {int rightIndex = s[right] == 'T' ? 0 : 1;cnt[rightIndex]++;while (cnt[0] > k && cnt[1] > k) {int leftIndex = s[left++] == 'T' ? 0 : 1;cnt[leftIndex]--;}ans = Math.max(ans, right - left + 1);}return ans;}
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [易聊]软件项目测试报告
  • Java 面向对象编程的四个基本原则(封装、继承、多态和抽象),并给出一个简单的例子说明如何在 Java 中应用这些原则?
  • Postman中参数填写方式
  • FaceFormer嘴形同步论文复现
  • Web开发
  • 使用Python+docx+jieba+wordcloud给word文档生成词云图
  • Java18 设计模式
  • vue2.0+ts中默认demo组件
  • ubuntu 安装opencv(3.4.16)
  • 【C++二分查找 贪心】1552. 两球之间的磁力
  • C语言 | Leetcode C语言题解之第384题打乱数组
  • 五、代理模式
  • E1.S接口如何解决SSD过热问题?
  • AI问答-协议-上传协议:FTP、FTPS、SFTP
  • 【算法 动态规划 简单多状态 dp 问题】打家劫舍题型
  • [笔记] php常见简单功能及函数
  • chrome扩展demo1-小时钟
  • Cookie 在前端中的实践
  • Go 语言编译器的 //go: 详解
  • go语言学习初探(一)
  • httpie使用详解
  • Java Agent 学习笔记
  • JavaScript 一些 DOM 的知识点
  • k个最大的数及变种小结
  • MySQL用户中的%到底包不包括localhost?
  • SQLServer之创建数据库快照
  • windows下如何用phpstorm同步测试服务器
  • 安装python包到指定虚拟环境
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • - 概述 - 《设计模式(极简c++版)》
  • 基于组件的设计工作流与界面抽象
  • 技术胖1-4季视频复习— (看视频笔记)
  • 前端面试题总结
  • 一个完整Java Web项目背后的密码
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​linux启动进程的方式
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • # 安徽锐锋科技IDMS系统简介
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #mysql 8.0 踩坑日记
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #宝哥教你#查看jquery绑定的事件函数
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2)空速传感器
  • (3)STL算法之搜索
  • (6)添加vue-cookie
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (LLM) 很笨
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)计算机毕业设计SSM疫情社区管理系统