news 2026/2/4 0:21:12

排序|倒序遍历|set

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
排序|倒序遍历|set

10.02

sort+hash分组

class Solution {
/*
变位分组
输入:["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
*/
public:
vector<vector<string>> groupAnagrams(vector<string>& strs)
{
int n=strs.size();
vector<vector<string>> ret;
unordered_map<string,vector<string>> hash;
for(auto& s:strs)
{
string t=s;
sort(t.begin(),t.end());
hash[t].push_back(s);
}
for(auto& [a,b]:hash)
{
ret.push_back(b);
}
return ret;
}
};

lc2017

算两行前缀和,遍历第一个机器人下移的列,取第二个机器人能拿的左右区域最大值里的最小值。

class Solution {
public:
long long gridGame(vector<vector<int>>& grid) {
/* 1、此题的目标是让乙的分数最小,所以甲的最优策略并不是自己先获取一个最大分数。
2、从乙的角度考虑,我们发现其实甲拿完以后,乙只有两个选择:要么横向走到底,再往下走;要么第一步往下走,再横向走到底
3、发现这个结论就好办了,遍历甲每一个向下的位置,同时求乙的分数,取最小值即可 */
int i, size = grid[0].size();
vector<long long> presum0(size, 0), presum1(size, 0);

getPresum(grid, presum0, presum1);
long long minSum = presum0[size - 1] - grid[0][0];

for (i = 1; i < size; ++i) {
minSum = min(minSum, max(presum0[size - 1] - presum0[i], presum1[i - 1])); //1的后缀 0的前缀 取最大
}

return minSum;
}

void getPresum(vector<vector<int>>& grid, vector<long long>& presum0, vector<long long>& presum1) {
int i, size = grid[0].size();

presum0[0] = grid[0][0];
presum1[0] = grid[1][0];

for (i = 1; i < size; ++i) {
presum0[i] = presum0[i - 1] + grid[0][i];
presum1[i] = presum1[i - 1] + grid[1][i];
}
}
};

lc2375

d倒序填充

遇到连续降序段就倒着填数,升序段顺着填数,拼出最小字典序的数字串

class Solution {

public:

string smallestNumber(string pattern) {

int n = pattern.size();

string res(n+1,'a');

int num = 1; // 从1开始填充数字

int i = 0;

while (i <= n)

{

if (i < n && pattern[i] == 'D') {

// 找到连续'D'的结束位置

int j = i;

while (j < n && pattern[j] == 'D')

j++;

// 倒序填充当前D段(长度为j-i+1)

for (int k = j; k >= i; k--) {

res[k]='0' + num;

num++;

}

i = j + 1; // 跳过已处理的D段

}

else

{

// 处理'I'或末尾,直接填充

res[i]='0' + num;

num++;

i++;

}

}

return res;

}

};

lcp52

  • 逆序遍历操作
  • set 的有序性快速定位区间节点
  • 染红时累加计数
  • 处理后立即删除避免重复统计,确保每个节点只按最后一次操作计算颜色。

class Solution {
public:
int getNumber(TreeNode* root, vector<vector<int>>& ops) {
set<int> s;
auto dfs = [&](this auto&& dfs,TreeNode* node)
{
if (!node) return;
dfs(node->left);
s.insert(node->val);
dfs(node->right);
};
dfs(root);
int ret = 0;
for (int i = ops.size() - 1; i >= 0; --i) {
int type = ops[i][0];
auto l = s.lower_bound(ops[i][1]), r = s.upper_bound(ops[i][2]);
if (type == 1)
ret += distance(l, r);


s.erase(l, r);
}
return ret;
}
};

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

语雀文档批量导出神器:轻松实现完整内容迁移

语雀文档批量导出神器&#xff1a;轻松实现完整内容迁移 【免费下载链接】yuque-exporter 项目地址: https://gitcode.com/gh_mirrors/yuqu/yuque-exporter 还在为语雀文档迁移而烦恼吗&#xff1f;这款强大的语雀文档导出工具能够帮你快速完成批量迁移&#xff0c;将珍…

作者头像 李华
网站建设 2026/1/31 19:44:43

基于SpringBoot高校迎新管理系统(毕设源码+文档)

课题说明本课题聚焦高校迎新工作流程繁琐、信息传递不及时及数据统计低效等痛点&#xff0c;设计并实现基于SpringBoot的高校迎新管理系统。系统依托SpringBoot框架的高效稳定与易拓展优势&#xff0c;整合新生信息管理、报到流程管控、资源调度协调等核心场景&#xff0c;涵盖…

作者头像 李华
网站建设 2026/1/31 2:42:28

SGrid 创建和可视化一个带有矢量数据(Vector Data)的 3D 结构化网格

一&#xff1a;主要的知识点 1、说明 本文只是教程内容的一小段&#xff0c;因博客字数限制&#xff0c;故进行拆分。主教程链接&#xff1a;vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①vtkHedgeHog将数据关联到网格上的顶点 二…

作者头像 李华
网站建设 2026/2/3 4:54:28

9个降AI率工具推荐!专科生高效避坑指南

9个降AI率工具推荐&#xff01;专科生高效避坑指南 AI降重工具&#xff0c;让论文更“自然” 在当今学术写作中&#xff0c;越来越多的专科生开始使用AI工具辅助完成论文写作。然而&#xff0c;随之而来的AIGC率过高、AI痕迹明显等问题也成为了困扰学生们的难题。如何在保证内容…

作者头像 李华
网站建设 2026/2/3 17:28:49

YOLOv8改进 - 注意力机制 | SEAM (Spatially Enhanced Attention Module) 空间增强注意力模块提升遮挡目标特征学习能力

前言 本文提出基于单阶段检测器YOLOv5的实时人脸检测器YOLO - FaceV2&#xff0c;并将SEAM模块集成到YOLOv8中。传统人脸检测算法在精度、速度及处理遮挡等问题上存在不足。SEAM模块采用多头注意力机制&#xff0c;通过深度可分离卷积、1x1卷积、全连接网络学习面部特征&#…

作者头像 李华
网站建设 2026/2/2 4:17:08

python+vue网上选课推荐系统vue前台的设计与实现_w2l3j

目录已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;已开发项目效果实现截图 同行可拿货,招校园代理 pythonvue网上选课推荐系统vue前台的设计与实现_w2l3j …

作者头像 李华