每日算法刷题Day11 5.20:leetcode不定长滑动窗口求最长/最大6道题,结束不定长滑动窗口求最长/最大,用时1h20min

news2025/12/17 1:33:36
6. 1695.删除子数组的最大得分(中等)

1695. 删除子数组的最大得分 - 力扣(LeetCode)

思想

1.给你一个正整数数组 nums ,请你从中删除一个含有 若干不同元素 的子数组**。**删除子数组的 得分 就是子数组各元素之  。
返回 只删除一个 子数组可获得的 最大得分 
2.题意转换:窗口内不含相同元素,哈希表维护即可

代码

c++:

class Solution {
public:
    int maximumUniqueSubarray(vector<int>& nums) {
        int n = nums.size();
        int res = 0;
        map<int, int> cnt;
        int left = 0;
        int sum = 0;
        for (int right = 0; right < n; ++right) {
            sum += nums[right];
            ++cnt[nums[right]];
            while (cnt[nums[right]] > 1) {
                --cnt[nums[left]];
                sum -= nums[left];
                ++left;
            }
            res = max(res, sum);
        }
        return res;
    }
};
7. 2958.最多K个重复元素的最长子数组(中等)

2958. 最多 K 个重复元素的最长子数组 - 力扣(LeetCode)

思想

1.如果一个数组中所有元素的频率都 小于等于 k ,那么我们称这个数组是  数组。
请你返回 nums 中 最长好 子数组的长度。
2.题意转换:所有元素的频率都 小于等于 k即为窗口条件

代码

c++:

class Solution {
public:
    int maxSubarrayLength(vector<int>& nums, int k) {
        int n = nums.size();
        int res = 0;
        map<int, int> cnt;
        int left = 0;
        for (int right = 0; right < n; ++right) {
            ++cnt[nums[right]];
            while (cnt[nums[right]] > k) {
                --cnt[nums[left]];
                ++left;
            }
            res = max(res, right - left + 1);
        }
        return res;
    }
};
8. 2024.考试的最大困扰度(中等,可一起考虑优化)

2024. 考试的最大困扰度 - 力扣(LeetCode)

思想

1.方法是 最大化 有 连续相同 结果的题数,请你返回在不超过 k 次操作的情况下,最大 连续 'T' 或者 'F' 的数目。
2.我的思想,F和T分开来求,两个最大值再取最大值
3.学习优化思想:
窗口内有4种情况:

  • T和F数量都不超过k,满足要求
  • T数量超过k,F数量不超过k,把F变成T,满足要求
  • F数量超过k,T数量不超过k,把T变成F,满足要求
  • T和F数量都超过k,不满足要求,更新窗口左端点
代码

c++:

class Solution {
public:
    int solve(string answerKey, int k,char c){
        int n=answerKey.size();
        int left=0;
        int sum=0; 
        int res=0;
        for(int right=0;right<n;++right){
            if(answerKey[right]==c)   ++sum;
            while(sum>k){
                if(answerKey[left]==c)    --sum;
                ++left;
            }
            res=max(res,right-left+1);
        }
        return res;
    }
    int maxConsecutiveAnswers(string answerKey, int k) {
        // F->T
        int resT=solve(answerKey,k,'F');
        // T->F
        int resF=solve(answerKey,k,'T');
        int res=max(resT,resF);
        return res;
    }
};

优化:

class Solution {
public:
    int maxConsecutiveAnswers(string answerKey, int k) {
        int n = answerKey.size();
        int left = 0;
        int sumT = 0, sumF = 0;
        int res = 0;
        for (int right = 0; right < n; ++right) {
            if (answerKey[right] == 'T')
                ++sumT;
            else
                ++sumF;
            while (sumT > k && sumF > k) {
                if (answerKey[left] == 'T')
                    --sumT;
                else
                    --sumF;
                ++left;
            }
            res = max(res, right - left + 1);
        }
        return res;
    }
};
9. 1004.最大连续1的个数III(中等)

1004. 最大连续1的个数 III - 力扣(LeetCode)

思想

1.给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 1 的最大个数 。
2.题目理解:0的数量不超过k

代码

c++:

class Solution {
public:
    int longestOnes(vector<int>& nums, int k) {
        int n = nums.size();
        int res = 0;
        int sum0 = 0;
        int left = 0;
        for (int right = 0; right < n; ++right) {
            if (nums[right] == 0)
                ++sum0;
            while (sum0 > k) {
                if (nums[left] == 0)
                    --sum0;
                ++left;
            }
            res = max(res, right - left + 1);
        }
        return res;
    }
};
10. 1658.将x减到0的最小操作数(中等,逆向思维)

1658. 将 x 减到 0 的最小操作数 - 力扣(LeetCode)

思想

1.给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。如果可以将 x 恰好 减到 0 ,返回 最小操作数 ;否则,返回 -1 。
2.逆向思维转换:求和为totalSum-x的最长窗口大小
3.逆向思维转换后k=totalSum-x,要判断k为负的特殊情况
4.res初始值设置为INT_MIN,先判断-1情况

代码

c++:

class Solution {
public:
    int minOperations(vector<int>& nums, int x) {
        int n = nums.size();
        int res = INT_MIN;
        long long totalSum = 0, sum = 0;
        for (const int val : nums)
            totalSum += (long long)val;
        long long k = totalSum - x;
        if (k < 0)
            return -1;
        int left = 0;
        for (int right = 0; right < n; ++right) {
            sum += (long long)nums[right];
            while (sum > k) {
                sum -= (long long)nums[left];
                ++left;
            }
            if (sum == k) {
                res = max(res, right - left + 1);
            }
        }
        if (res == INT_MIN)
            return -1;
        return n - res;
    }
};

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

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

相关文章

解决vscode在任务栏显示白色图标

长久不用&#xff0c;不知道怎么着就显示成白色图标&#xff0c;虽然不影响使用&#xff0c;但是看起来不爽 问了豆包&#xff0c;给了个解决方法&#xff1a; 1、打开隐藏文件&#xff0c; 由于图标缓存文件是隐藏文件&#xff0c;首先点击资源管理器中的 “查看” 菜单&am…

架构思维:构建高并发扣减服务_分布式无主架构

文章目录 Pre无主架构的任务简单实现分布式无主架构 设计和实现扣减中的返还什么是扣减的返还返还实现原则原则一&#xff1a;扣减完成才能返还原则二&#xff1a;一次扣减可以多次返还原则三&#xff1a;返还的总数量要小于等于原始扣减的数量原则四&#xff1a;返还要保证幂等…

uni-app学习笔记九-vue3 v-for指令

v-for 指令基于一个数组来渲染一个列表。v-for 指令的值需要使用 item in items 形式的特殊语法&#xff0c;其中 items 是源数据的数组&#xff0c;而 item 是迭代项的别名&#xff1a; <template><view v-for"(item,index) in 10" :key"index"…

MAC电脑中右键后复制和拷贝的区别

在Mac电脑中&#xff0c;右键菜单中的“复制”和“拷贝”操作在功能上有所不同&#xff1a; 复制 功能&#xff1a;在选定的位置创建一个与原始文件相同的副本。快捷键&#xff1a;CommandD用于在当前位置快速复制文件&#xff0c;CommandC用于将内容复制到剪贴板。效果&…

华为2025年校招笔试手撕真题教程(二)

一、题目 大湾区某城市地铁线路非常密集&#xff0c;乘客很难一眼看出选择哪条线路乘坐比较合适&#xff0c;为了解决这个问题&#xff0c;地铁公司希望你开发一个程序帮助乘客挑选合适的乘坐线路&#xff0c;使得乘坐时间最短&#xff0c;地铁公司可以提供的数据是各相邻站点…

征程 6 J6E/M linear 双int16量化支持替代方案

1.背景简介 当发现使用 plugin 精度 debug 工具定位到是某个 linear 敏感时&#xff0c;示例如下&#xff1a; op_name sensitive_type op_type L1 quant_dty…

深度学习模块缝合拼接方法套路+即插即用模块分享

前言 在深度学习中&#xff0c;模型的设计往往不是从头开始&#xff0c;而是通过组合不同的模块来构建。这种“模块缝合”技术&#xff0c;就像搭积木一样&#xff0c;把不同的功能模块拼在一起&#xff0c;形成一个强大的模型。今天&#xff0c;我们就来聊聊四种常见的模块缝…

改写视频生产流程!快手SketchVideo开源:通过线稿精准控制动态分镜的AI视频生成方案

Sketch Video 的核心特点 Sketch Video 通过手绘生成动画的形式&#xff0c;将复杂的信息以简洁、有趣的方式展现出来。其核心特点包括&#xff1a; 超强吸引力 Sketch Video 的手绘风格赋予了视频一种质朴而真实的质感&#xff0c;与常见的精致特效视频形成鲜明对比。这种独…

04-Web后端基础(基础知识)

而像HTML、CSS、JS 以及图片、音频、视频等这些资源&#xff0c;我们都称为静态资源。 所谓静态资源&#xff0c;就是指在服务器上存储的不会改变的数据&#xff0c;通常不会根据用户的请求而变化。 那与静态资源对应的还有一类资源&#xff0c;就是动态资源。那所谓动态资源&…

Spring Cloud生态与技术选型指南:如何构建高可用的微服务系统?

引言&#xff1a;为什么选择Spring Cloud&#xff1f; 作为全球开发者首选的微服务框架&#xff0c;Spring Cloud凭借其开箱即用的组件、与Spring Boot的无缝集成&#xff0c;以及活跃的社区生态&#xff0c;成为企业级微服务架构的基石。但在实际项目中&#xff0c;如何从众多…

手写简单的tomcat

首先&#xff0c;Tomcat是一个软件&#xff0c;所有的项目都能在Tomcat上加载运行&#xff0c;Tomcat最核心的就是Servlet集合&#xff0c;本身就是HashMap。Tomcat需要支持Servlet&#xff0c;所以有servlet底层的资源&#xff1a;HttpServlet抽象类、HttpRequest和HttpRespon…

高等数学-积分

一、不定积分 定理&#xff1a;如果函数f(x)在区间I上连续&#xff0c;那么f(x)在区间I上一定有原函数&#xff0c;即一定存在区间I上的可导函数F(x)&#xff0c;使得F(x)f(x) &#xff0c;x∈I 简单地说&#xff1a;连续函数必有原函数。 极限lim*0->x {[∫*0^x sin(t^2)…

IOS平台Unity3D AOT全局模块结构分析

分析背景 由于IOS平台中不允许执行动态代码&#xff0c;Unity 4.6之前的版本在IOS平台中采用了AOT的处理方式&#xff0c;提前将C#代码静态编译为机器识别的二进制机器码。Unity引擎4.6之前的版本中IOS框架采用了Mono的AOT机制实现静态编译和处理&#xff0c;本文针对全局AOT模…

CyberSecAsia专访CertiK首席安全官:区块链行业亟需“安全优先”开发范式

近日&#xff0c;权威网络安全媒体CyberSecAsia发布了对CertiK首席安全官Wang Tielei博士的专访&#xff0c;双方围绕企业在进军区块链领域时所面临的关键安全风险与防御策略展开深入探讨。 Wang博士在采访中指出&#xff0c;跨链桥攻击、智能合约漏洞以及私钥管理不当&#x…

文件操作和IO-3 文件内容的读写

文件内容的读写——数据流 流是操作系统提供的概念&#xff0c;Java对操作系统的流进行了封装。 数据流就像水流&#xff0c;生生不息&#xff0c;绵延不断。 水流的特点&#xff1a;比如要100mL的水&#xff0c;可以一次接10mL&#xff0c;分10次接完&#xff0c;也可以一次接…

SpringAI 大模型应用开发篇-SpringAI 项目的新手入门知识

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 1.0 SpringAI 概述 目前大模型应用开发最常见的框架就是 LangChain&#xff0c;然而 LangChain 是基于 Python 语言&#xff0c;虽然有 LangChain4j&#xff0c;但是对于大量使…

编程速递-RAD Studio 12.3 Athens五月补丁:May Patch Available

编程速递-RAD Studio 12.3 Athens四月补丁&#xff1a;关注软件性能的开发者&#xff0c;安装此补丁十分必要 今天 &#xff08;2025 年 5 月 19 日&#xff09;Embarcadero 发布了 RAD Studio、Delphi 和 CBuilder 12.3 Athens&#xff08;雅典&#xff09;的第二个补丁。 RA…

Matlab学习合集

1.变量 2.常见的数学函数 3. 向量 向量的创建&#xff1a; 直接创建&#xff1a;针对于数量少的情况 冒号法 函数创建&#xff1a;

基于labview的声音采集与存储分析系统

基于LabVIEW的声音信号采集与存储分析系统开发实战&#xff1a;从原理到代码实现 &#xff08;内含源码&#xff09;基于labview的声音采集与处理系统 点击跳转工坊 点击跳转视频 引言 在音频技术与工业监测领域&#xff0c;声音信号的实时采集与分析是一项基础且关键的任务。…

【项目记录】部门增删改及日志技术

1 删除部门 1.1 需求 删除部门数据。在点击 "删除" 按钮&#xff0c;会根据ID删除部门数据。 了解了需求之后&#xff0c;我们再看看接口文档中&#xff0c;关于删除部门的接口的描述&#xff0c;然后根据接口文档进行服务端接口的开发。 1.2 接口描述 1.2.1 基…