news 2026/3/30 23:16:54

pq|消消乐|定长滑窗

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
pq|消消乐|定长滑窗

lc2067

固定长度滑动窗口,遍历所有“k种字符各出现count次”的子串长度(k*count)

统计符合条件的子串总数

优雅变量的控制 只能不断的练习与感受...

class Solution {
public:
int equalCountSubstrings(string s, int cnt)

{
int n = s.size(), res = 0;
for (int k = 1; k <= 26; k++) {
int len = k * cnt;
if (len > n) break;


vector<int> c(26, 0);
int v = 0;
for (int i = 0; i < len; i++)
if (++c[s[i]-'a'] == cnt) v++;
if (v == k) res++;


for (int i = len; i < n; i++) {
int out = s[i-len]-'a', in = s[i]-'a';
if (c[out] == cnt) v--;
c[out]--;
if (++c[in] == cnt) v++;
if (v == k) res++;
}
}
return res;
}
};

lc723

“糖果消消乐”的实现:

**标记负数(替代额外数组)**找出行/列中连续3个相同的糖果

让未消除的糖果下落补位,重复直到没有可消除的糖果

1.总体思路:就是消消乐

  • 模拟过程
  • 标记
  • 整理

2.利用数值的正负性,来省略调mark数组

3.整理的时候注意从下往上收。

桶排序(bucketSort)也是类似的整理顺序

class Solution
{
public:
vector<vector<int>> candyCrush(vector<vector<int>>& board)
{
int Row = board.size(), Col = board[0].size();
bool need_todo = true;
//////// 思路:根据例子,L形也是可以的。先把原先的数组置为 -abs(x, x, x),省掉mark数组
while (need_todo == true) //上一次有消消乐,这次可能还需要消消乐
{
need_todo = false; //标记,看这轮需不需要消消乐
////先搞定行
for (int r = 0; r < Row; r ++)
{
for (int c = 0; c < Col - 2; c ++)
{
if ( board[r][c]!=0 && abs(board[r][c]) == abs(board[r][c+1]) && abs(board[r][c+1]) == abs(board[r][c+2]) )
{
need_todo = true;
int tmp = - abs(board[r][c]);
board[r][c] = tmp;
board[r][c+1] = tmp;
board[r][c+2] = tmp;
}
}
}
//// 再搞定列
for (int c = 0; c < Col; c ++)
{
for (int r = 0; r < Row - 2; r ++)
{
if ( board[r][c] != 0 && abs(board[r][c]) == abs(board[r+1][c]) && abs(board[r+1][c]) == abs(board[r+2][c]) )
{
need_todo = true;
int tmp = -abs(board[r][c]);
board[r][c] = tmp;
board[r+1][c] = tmp;
board[r+2][c] = tmp;
}
}
}
if (need_todo == true) //如果需要消消乐
{
//// 因为是从上往下掉落,需要一列一列的搞定。
for (int c = 0; c < Col; c ++)
{
int rr = Row - 1;
for (int r = Row - 1; r > -1; r --)
{//从下往上收
if (board[r][c] > 0)
{
board[rr][c] = board[r][c];
rr --;
}
}
while (rr > -1) //上面有空缺的,补0
{
board[rr][c] = 0;
rr --;
}
}
}
}
return board;
}
};

lc253

大于小根堆顶 可继承其会议室

class Solution {
public:
int minMeetingRooms(vector<vector<int>>& v) {
sort(v.begin(), v.end(), [](auto& a, auto& b) { return a[0] < b[0]; });
priority_queue<int, vector<int>, greater<int>> q;
for (auto& m : v) {
if (!q.empty() && m[0] >= q.top()) q.pop();
q.push(m[1]);
}
return q.size();
}
};

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/28 4:58:10

开题报告不是“过关文档”,而是科研蓝图的“第一次心跳”——宏智树AI如何让模糊想法长出逻辑骨架?

在研究生生涯的起点&#xff0c;有一份被严重误解的文档&#xff1a;开题报告。 它常被当作“流程性任务”——凑字数、套模板、赶在截止前交差。 但真正懂科研的人知道&#xff1a;开题报告不是用来“通过”的&#xff0c;而是用来“思考”的。 它是你与自己研究计划的第一次…

作者头像 李华
网站建设 2026/3/28 0:37:34

二叉树输出(btout)(信息学奥赛一本通- P1366)

【题目描述】树的凹入表示法主要用于树的屏幕或打印输出&#xff0c;其表示的基本思想是兄弟间等长&#xff0c;一个结点的长度要不小于其子结点的长度。二叉树也可以这样表示&#xff0c;假设叶结点的长度为1&#xff0c;一个非叶结点的长度等于它的左右子树的长度之和。一棵二…

作者头像 李华
网站建设 2026/3/26 21:46:25

写论文软件哪个好?别被“秒出全文”迷惑——真正能陪你从开题到答辩的,只有它把AI当“科研协作者”,而非“代笔枪手”

“写论文软件哪个好&#xff1f;” 这个问题在毕业季刷爆高校论坛。 你点开推荐列表&#xff0c;满屏都是&#xff1a;“3分钟生成万字论文”“导师看不出是AI写的”“毕业无忧神器”…… 但真相是—— 这些工具生成的“论文”&#xff0c;往往文献是编的、图是假的、数据是幻…

作者头像 李华
网站建设 2026/3/25 8:23:33

从手动编写到AI生成:Redux开发效率提升300%

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请分别用传统手动编写和使用AI生成两种方式实现相同的Redux功能&#xff1a;用户认证系统。要求包含&#xff1a;登录、登出、token刷新、权限验证等功能。完成后请对比两种方式的代…

作者头像 李华
网站建设 2026/3/26 3:53:07

3分钟快速搭建MySQL8开发环境:Docker极简方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请设计一个极简的Docker MySQL8开发环境方案&#xff0c;要求&#xff1a;1. 最简配置(单容器) 2. 预置常用配置 3. 包含示例数据库 4. 一键启动脚本 5. 快速连接指南 6. 资源占用最…

作者头像 李华
网站建设 2026/3/27 14:37:27

使用帧加载vue组件

背景首页渲染页面的时候&#xff0c;因为加载的元素特别多&#xff0c;页面会出现白屏解决方案使用浏览器的API requestAnimationFrame&#xff0c; 比如每一帧加载一个组件&#xff0c;依次加载所有的组件举例说明目录结构components--HeavyComp.vue APP.vue useDefer.jsuseDe…

作者头像 李华