每日算法刷题Day8 5.16:leetcode定长滑动窗口4道题,用时1h

5. 2379.得到k个黑块的最少涂色次数(简单)

2379. 得到 K 个黑块的最少涂色次数 - 力扣(LeetCode)

思想

1.返回至少出现 一次 连续 k 个黑色块的 最少 操作次数
2.还是定长k,统计量就是把白色变成黑色的操作次数,无需记录当前有多少个黑色
,应为维护定长k,一定是k个黑色块

代码

c++:

class Solution {
public:int minimumRecolors(string blocks, int k) {int res = 1e9, cnt = 0;for (int i = 0; i < blocks.size(); ++i) {if (blocks[i] == 'W')cnt++;if (i < k - 1)continue;res = min(res, cnt);if (blocks[i - k + 1] == 'W')cnt--;}return res;}
};
6. 2841.几乎唯一子数组的最大和(中等)

2841. 几乎唯一子数组的最大和 - 力扣(LeetCode)

思想

1.返回 nums 中长度为 k 的 几乎唯一 子数组的 最大和 ,如果不存在几乎唯一子数组,请你返回 0
2.如果 nums 的一个子数组有至少 m 个互不相同的元素,我们称它是 几乎唯一 子数组。
3.本题与前几题区别在于统计量要记录子数组互补相同元素的个数,及每个元素出现的次数(为了删除元素),所以需要一个哈希表map来维护

代码

c++:

class Solution {
public:long long maxSum(vector<int>& nums, int m, int k) {long long res = 0, sum = 0;map<int, int> mp;for (int i = 0; i < nums.size(); ++i) {sum += (long long)nums[i];mp[nums[i]]++;if (i < k - 1)continue;if (mp.size() >= m)res = max(res, sum);sum -= (long long)nums[i - k + 1];mp[nums[i - k + 1]]--;if (mp[nums[i - k + 1]] <= 0)mp.erase(nums[i - k + 1]);}return res;}
};

注意:
1.erase()方法,不是remove
python:

class Solution:def maxSum(self, nums: List[int], m: int, k: int) -> int:res, sum = 0, 0cnt = defaultdict(int)for i in range(len(nums)):sum += nums[i]cnt[nums[i]] += 1if i < k - 1:continueif len(cnt) >= m:res = max(res, sum)sum -= nums[i - k + 1]cnt[nums[i - k + 1]] -= 1if cnt[nums[i - k + 1]] == 0:del cnt[nums[i - k + 1]]return res

注意:
1.用defaultdict(int),可以自动为不存在的键生成默认值,避免手动判断和初始化,类似于c++的map,而dict{}不行
2.用del删除元素

7. 1423.可获得的最大点数(中等)

1423. 可获得的最大点数 - 力扣(LeetCode)

思想

1.每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌,请你返回可以获得的最大点数。
2.本题逆向思维,求n-k长度的最小值即可,但是要注意,滑动窗口的一个前提条件是窗口大小>0,所以n-k=0要单独判断,先返回答案

代码

c++:

class Solution {
public:int maxScore(vector<int>& cardPoints, int k) {int n = cardPoints.size();long long totalSum = 0;for (int x : cardPoints)totalSum += (long long)x;long long res = 1e18, sum = 0;int len = n - k;if (len == 0)return totalSum; //窗口长度为0for (int i = 0; i < n; ++i) {sum += (long long)cardPoints[i];if (i < len - 1)continue;res = min(res, sum);sum -= (long long)cardPoints[i - len + 1];}return totalSum - res; //窗口长度不为0,res!=1e18}
};
8. 1052.爱生气的书店老板(中等)

1052. 爱生气的书店老板 - 力扣(LeetCode)

思想

1.当书店老板生气时,那一分钟的顾客就会不满意,若老板不生气则顾客是满意的。
书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 minutes 分钟不生气,但却只能使用一次。
请你返回 这一天营业下来,最多有多少客户能够感到满意 。
2.题目要求感到满意的用户数量,可以依据老板生气的0/1划分为两部分sum0,sum1。sum0为老板本来就是0的总人数,与minutes无关,可以一开始直接求出。sum1为老板在minutes内从1变成0的总人数,所以为定长滑动窗口,统计量的判断条件就是生气1,统计量就是sum1。

代码
class Solution {
public:int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int minutes) {int n = customers.size();int res = 0, sum0 = 0, sum1 = 0;for (int i = 0; i < n; ++i) {if (grumpy[i] == 0) {sum0 += customers[i];}}for (int i = 0; i < n; ++i) {if (grumpy[i] == 1)sum1 += customers[i];if (i < minutes - 1)continue;res = max(res, sum1);if (grumpy[i - minutes + 1] == 1)sum1 -= customers[i - minutes + 1];}return sum0 + res; // 加res,而不是sum1}
};

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

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

相关文章

很啰嗦,再次总结 DOM

DOM (文档对象模型) 详解 一、DOM 基础概念 1. 定义与作用 DOM&#xff08;Document Object Model&#xff09;即文档对象模型&#xff0c;是一种用于 HTML 和 XML 文档的编程接口。它将文档解析为一个由节点和对象组成的树状结构&#xff0c;允许程序和脚本动态访问、修改文…

ES6 (ECMAScript 2015) 详解

文章目录 一、ES6简介1.1 什么是ES6&#xff1f;1.2 为什么要学习ES6&#xff1f;1.3 浏览器支持情况 二、let和const关键字2.1 let关键字2.2 const关键字2.3 var、let和const的选择 三、箭头函数3.1 基本语法3.2 箭头函数的特点3.3 何时使用箭头函数 四、模板字符串4.1 基本语…

LeetCode 746 使用最小花费爬楼梯

当然可以&#xff01;LeetCode 746 是一道经典的动态规划入门题&#xff0c;我来用 C 为你详细解释。 题目描述 给定一个整数数组 cost&#xff0c;其中每个元素 cost[i] 表示从第 i 个台阶向上爬需要支付的费用。一旦支付费用&#xff0c;你可以选择向上爬 1 步 或 2 步。 你…

6.1.1图的基本概念

基本概念 图&#xff1a; 顶点集边集 顶点集&#xff1a;所有顶点的集合&#xff0c;不能为空&#xff08;因为图是顶点集和边集组成&#xff0c;其中一个顶点集不能为空&#xff0c;则图肯定不为空&#xff09; 边集&#xff1a;所有边的集合&#xff0c;边是由顶点集中的2…

WeakAuras Lua Script [TOC BOSS 5 - Anub‘arak ]

WeakAuras Lua Script [TOC BOSS 5 - Anubarak ] 阿努巴拉克 - 小强中虫范围 插件 !WA:2!DE1B0Xrvv8UmuRmIqZwiaXQmgKycwsYUPjPLZPTz3nBYULKnBNDtlYP6o)7T7mMzNz6BMnnBefBqGacIUOsXIkSIki)rCbLkIhLi6h8t3to6h9G2dXt4R9d(rR33mt2MyepQ75KSV3BUZ9FV7VF37g54rDvgU)yX7)GrRgvlQ2Y…

【C/C++】深度探索c++对象模型_笔记

1. 对象内存布局 (1) 普通类&#xff08;无虚函数&#xff09; 成员变量排列&#xff1a;按声明顺序存储&#xff0c;但编译器会根据内存对齐规则插入填充字节&#xff08;padding&#xff09;。class Simple {char a; // 1字节&#xff08;偏移0&#xff09;int b; …

湖北理元理律师事务所:债务优化中的双维支持实践解析

在债务压力与生活质量失衡的社会议题下&#xff0c;法律服务机构的功能边界正在从单一的法律咨询向复合型支持延伸。湖北理元理律师事务所通过“法律心理”双维服务模式&#xff0c;探索债务优化与生活保障的平衡路径&#xff0c;其方法论或为行业提供实践参考。 法律框架&…

Python uv包管理器使用指南:从入门到精通

Python uv包管理器使用指南&#xff1a;从入门到精通 作为一名Python开发者&#xff0c;你是否曾经为虚拟环境管理和依赖包安装而头疼&#xff1f;今天我要向大家介绍一个强大的工具——uv包管理器&#xff0c;它将彻底改变你的Python开发体验。 什么是uv包管理器&#xff1f…

Windows系统安全加固

掌握的加固点&#xff1a; 用户系统检查 口令策略检查 日志审计检查 安全选项检查 信息保护检查 2.2.1 用户系统检查 #检查系统版本内核 判断依据&#xff1a;无 检查方式&#xff1a;命令 msinfo32 dxdiag查看 #检查Administrator账号是否停用 判断依据&#xff1a;禁…

小蜗牛拨号助手用户使用手册

一、软件简介 小蜗牛拨号助手是一款便捷实用的拨号辅助工具&#xff0c;能自动识别剪贴板中的电话号码&#xff0c;支持快速拨号操作。最小化或关闭窗口后&#xff0c;程序将在系统后台运行&#xff0c;还可设置开机自启&#xff0c;方便随时使用&#xff0c;提升拨号效率。 …

c/c++消息队列库RabbitMQ的使用

RabbitMQ C 消息队列组件设计与实现文档 1. 引言 1.1. RabbitMQ 简介 RabbitMQ 是一个开源的消息代理软件&#xff08;也称为面向消息的中间件&#xff09;&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;。RabbitMQ 服务器是用 Erlang 语言编写的&#…

线程(二)OpenJDK 17 中线程启动的完整流程用C++ 源码详解之主-子线程通信机制

深入解析OpenJDK 17中Java线程的创建与主-子线程通信机制 引言 在Java中&#xff0c;线程的创建与启动通过Thread.start()实现&#xff0c;但底层是JVM与操作系统协作完成的复杂过程。本文基于OpenJDK 17的C源码&#xff0c;揭秘Java线程创建时主线程与子线程的通信机制&…

多线程爬虫语言选择与实现

之前文中有人提到&#xff1a;想要一个简单易用、能快速实现多线程爬虫的方案&#xff0c;而且目标是小网站&#xff0c;基本可以确定对反爬虫措施要求不高&#xff0c;这些就比较简单了。 以往我肯定要考虑常见的编程语言中哪些适合爬虫。Python、JavaScript&#xff08;Node…

AMD Vivado™ 设计套件生成加密比特流和加密密钥

概括 重要提示&#xff1a;有关使用AMD Vivado™ Design Suite 2016.4 及更早版本进行 eFUSE 编程的重要更新&#xff0c;请参阅AMD设计咨询 68832 。 本应用说明介绍了使用AMD Vivado™ 设计套件生成加密比特流和加密密钥&#xff08;高级加密标准伽罗瓦/计数器模式 (AES-GCM)…

Unity3D仿星露谷物语开发44之收集农作物

1、目标 在土地中挖掘后&#xff0c;洒下种子后逐渐成长&#xff0c;然后使用篮子收集成熟后的农作物&#xff0c;工具栏中也会相应地增加该农作物。 2、修改CropStandard的参数 Assets -> Prefabs -> Crop下的CropStandard&#xff0c;修改其Box Collider 2D的Size(Y…

list重点接口及模拟实现

list功能介绍 c中list是使用双向链表实现的一个容器&#xff0c;这个容器可以实现。插入&#xff0c;删除等的操作。与vector相比&#xff0c;vector适合尾插和尾删&#xff08;vector的实现是使用了动态数组的方式。在进行头删和头插的时候后面的数据会进行挪动&#xff0c;时…

CE17.【C++ Cont】练习题组17(堆专题)

目录 1.P2085 最小函数值 题目 分析 方法1:暴力求解 方法2:二次函数的性质(推荐!) 代码 提交结果 2.P1631 序列合并 分析 方法1:建两个堆 第一版代码 提交结果 第二版代码 提交结果 第三版代码 提交结果 方法2:只建一个堆 代码 提交结果 1.P2085 最小函数值…

题单:表达式求值1

题目描述 给定一个只包含 “加法” 和 “乘法” 的算术表达式&#xff0c;请你编程计算表达式的值。 输入格式 输入仅有一行&#xff0c;为需要计算的表达式&#xff0c;表达式中只包含数字、加法运算符 和乘法运算符 *&#xff0c;且没有括号。 所有参与运算的数字不超过…

DeepSeek超大模型的高效训练策略

算力挑战 训练DeepSeek此类千亿乃至万亿级别参数模型,对算力资源提出了极高要求。以DeepSeek-V3为例,其基础模型参数量为67亿,采用专家混合(MoE)架构后实际激活参数可达几百亿。如此规模的模型远超单张GPU显存容量极限,必须借助分布式并行才能加载和训练。具体挑战主要包…

MFC中DoDataExchange的简明指南

基本概念 DoDataExchange 是 MFC 框架中实现数据自动同步的核心函数&#xff0c;主要用于对话框中控件与成员变量的双向绑定。它能让控件中的数据和成员变量自动保持一致&#xff0c;无需手动读写控件数据。 使用示例 1&#xff09;变量声明 在对话框头文件中声明与控件对应…