news 2026/4/16 14:05:46

排序|倒序遍历|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/4/15 22:33:22

基于springboot服装商店管理与分析系统(毕设源码+文档)

课题说明 本课题聚焦服装商店运营流程繁琐、库存管控混乱及销售数据分析缺失等痛点&#xff0c;设计并实现基于SpringBoot的服装商店管理与分析系统。系统依托SpringBoot框架的高效稳定与易拓展优势&#xff0c;整合商品管理、库存管控、销售运营、数据统计分析等核心场景&…

作者头像 李华
网站建设 2026/4/16 11:03:03

基于微信小程序的驾校预约管理系统的小程序毕设源码+文档+讲解视频

前言 本课题聚焦驾校培训行业预约流程繁琐、资源调度低效等痛点&#xff0c;设计开发基于微信小程序的驾校预约管理系统。系统依托微信生态的高普及率与便捷性&#xff0c;整合学员预约、教练管理、场地调度等核心场景&#xff0c;涵盖科目训练预约、考试名额申请、教练选择匹配…

作者头像 李华
网站建设 2026/4/16 11:08:58

基于微信小程序的咖啡店点餐系统毕设源码+文档+讲解视频

前言 本课题聚焦咖啡店线下点餐排队拥堵、效率低下及线上服务缺失等痛点&#xff0c;设计开发基于微信小程序的咖啡店点餐系统。系统依托微信生态高普及率与便捷操作优势&#xff0c;整合到店点餐、外卖下单、预约取餐、会员管理等核心场景&#xff0c;涵盖饮品分类展示、口味定…

作者头像 李华
网站建设 2026/4/16 11:15:28

基于微信小程序的考研资源共享平台的设计与实现毕设源码+文档+讲解视频

前言 本课题聚焦考研群体资源获取分散、优质资料稀缺及交流渠道不畅等痛点&#xff0c;设计并实现基于微信小程序的考研资源共享平台。系统依托微信生态高普及率与便捷传播优势&#xff0c;整合资源分享、需求对接、学习交流等核心场景&#xff0c;涵盖考研真题、复习笔记、网课…

作者头像 李华
网站建设 2026/4/16 11:09:02

利用AI技术提升论文效率,9款平台开题与降重功能实测推荐

工具对比排名表格工具名称核心功能突出优势Aibiye降AIGC率适配高校规则&#xff0c;AI痕迹弱化Aicheck论文降重速度快&#xff0c;保留专业术语Askpaper论文降重逻辑完整性好秘塔写作猫智能降重结合语法检查DeepL多语言降重翻译改写灵活知芽AIAI率优化查重降重一站式QuillBotAI…

作者头像 李华