尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

排序|倒序遍历|set

排序|倒序遍历|set
📅 发布时间:2026/6/18 20:23:15

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;
}
};

相关新闻

  • 镜像的创建
  • 在Django中安装、配备、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的机制
  • 共享指针和独占指针

最新新闻

  • PeakRoutine 新手入门与实战指南
  • Gemma-4B真实参数量揭秘:Hybrid Attention与PLE如何定义端侧有效参数
  • Claude上下文优化三法则:Skills懒加载、Explore子代理与路径规则
  • Generative Ops:生成式运营的原理、能力与落地实践
  • DeepSeek-V4成本真相:技术细节如何决定真实价格
  • SoapUI:API测试瑞士军刀,从功能到性能的全栈实战指南

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号