【刷题日记】2024. 考试的最大困扰度

简介: 本次刷题日记的第 17 篇,力扣题为:67. 二进制求和 ,简单

【刷题日记】2024. 考试的最大困扰度

本次刷题日记的第 17 篇,力扣题为:67. 二进制求和简单

一、题目描述:

image.png

今天来刷一个中等的题,乍一看是一个考试的题,仔细看了之后发现是一个修改答案的题?


看题目的话就是将给出的字符串中,修改 k 个字符来保证连续的相同字符的数量是最大的,一起来分析一下

二、思路分析:

1、这道题考察了什么思想?你的思路是什么?

这道题给了我们那些重点信息呢,瞅瞅看:

  • 题目给出一个字符串,只有 T 和 F ,并给出可以修改的 k 个字符
  • 修改的 K 个字符,只能修改成 T 或者是 F
  • 看上去不就是一个修改字符的问题吗?那么我们需要如何去修改才能保证连续的相同字符个数达到最大呢

我们画一个图,在草稿上按照常规逻辑去框选我们期望的数据就可以得出我们想要的答案

以题目中给出的示例: answerKey = "TTFTTFTT", k = 1

image.png

看上图我们可以知道,我们用滑动的框框去框选符合我们要求的区间的时候

就可以逐个比对出哪些是符合要求的,哪些是不符合要求的,并且同样也可以计算出来连续相同的字符个数,进而计算出最大值

此处需要注意的是,题目给出的可以修改 k 个字符的条件,这个条件加入到逻辑中需要重点关注,那么剩下的,就是来翻译代码的过程了

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码,可以注意查看一下我们对于 k 的处理

编码如下:

func maxConsecutiveAnswers(answerKey string, k int) int {
    return max(helper(answerKey, k, 'T'),helper(answerKey, k, 'F'))
}
// 帮助函数,主要是计算按照要求填充 k 个指定字符的时候,该字符最长连续的个数
func helper(answerKey string, k int, ch byte) (ans int) {
    left, sum := 0, 0
    for right := range answerKey {
        if answerKey[right] != ch {
            sum++
        }
        // 如果识别到目前的区间,已经有大于 k 个非我们期望的字符,那么就要开始移动
        for sum > k {
            if answerKey[left] != ch {
                sum--
            }
            left++
        }
        // 计算符合要求的区间连续指定字符的个数,和上一个区间结果比较,取最大值
        ans = max(ans, right-left+1)
    }
    return
}
func max(a, b int) int {
    if b > a {
        return b
    }
    return a
}

看了上述编码后就知道这个题还是非常简单的,但是思想也是相当重要的,无论做什么事情,基础要牢固 ,思路正确了,设计正确了,编码基本差不了啥了,谁来实现都一样

四、总结:

该题的时间复杂度,是 O(n) , 此处我们也是循环了 2 次 answerKey 的长度,所以是 O(n),空间复杂度是 O(1) , 引入的只是尝试级别的内存消耗

原题地址:2024. 考试的最大困扰度

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关文章
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的怀旧唱片售卖系统附带文章和源代码设计说明文档ppt
基于ssm+vue.js+uniapp小程序的怀旧唱片售卖系统附带文章和源代码设计说明文档ppt
154 3
|
9月前
|
监控 测试技术 数据库连接
RunnerGo API 性能测试实战:从问题到解决的全链路剖析
API性能测试是保障软件系统稳定性与用户体验的关键环节。本文详细探讨了使用RunnerGo全栈测试平台进行API性能测试的全流程,涵盖测试计划创建、场景设计、执行分析及优化改进。通过电商平台促销活动的实际案例,展示了如何设置测试目标、选择压测模式并分析结果。针对发现的性能瓶颈,提出了代码优化、数据库调优、服务器资源配置和缓存策略等解决方案。最终,系统性能显著提升,满足高并发需求。持续关注与优化API性能,对系统稳定运行至关重要。
|
监控 算法 测试技术
量化交易软件开发 | 搭建区块链数字货币量化交易系统规则解析
在数字货币领域,量化交易已经成为投资者获取稳定收益的一种重要策略。而开发一款高效可靠的量化交易软件,则是实现量化交易的关键。本文从零开始,以搭建区块链数字货币量化交易系统为主题,从理论框架、领域案例和工作流程三个角度出发,为您详细介绍量化交易软件开发的过程。
|
网络虚拟化 数据安全/隐私保护 网络架构
无线网络管理设备
无线网络管理设备
766 3
|
机器学习/深度学习 算法 测试技术
|
物联网 5G 数据处理
|
网络协议 Java Unix
从0到服务器开发——TinyWebServer(上)
从0到服务器开发——TinyWebServer
982 1
|
应用服务中间件
tomcat启动报错:Internal error (java.lang.IllegalStateException): Duplicate key org.jetbrains.jps.model.module.impl.JpsModuleImpl@548a102f
tomcat启动报错:Internal error (java.lang.IllegalStateException): Duplicate key org.jetbrains.jps.model.module.impl.JpsModuleImpl@548a102f
833 0
tomcat启动报错:Internal error (java.lang.IllegalStateException): Duplicate key org.jetbrains.jps.model.module.impl.JpsModuleImpl@548a102f
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的私人诊所管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的私人诊所管理系统附带文章源码部署视频讲解等
153 0
|
存储 开发框架 Java
【CLR C#】浅谈.Net的GC(垃圾回收)机制及其整体流程
在.NET程序开发中,为了将开发人员从繁琐的内存管理中解脱出来,将更多的精力花费在业务逻辑上,CLR提供了自动执行垃圾回收的机制来进行内存管理,开发人员甚至感觉不到这一过程的存在。.NET程序可以找出某个时间点上哪些已分配的内存空间没有被程序使用,并自动释放它们。自动找出并释放不再使用的内存空间机制,就称为垃圾回收机制。本文主要介绍.Net中的GC(垃圾回收)机制及其整体流程。
【CLR C#】浅谈.Net的GC(垃圾回收)机制及其整体流程

热门文章

最新文章