当前位置: 首页 > news >正文

排序|倒序遍历|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;
}
};

http://www.jsqmd.com/news/135451/

相关文章:

  • python私人健身和教练预约管理系统--论文pycharm django vue flask
  • FPGA基础知识(二十一):xilinx FPGA中常用的原语
  • Google与OpenAI绘图工具遭滥用,阿里巴巴开源语音模型,知乎发布AI产品榜单,Jan团队发布Jan-v2-VL-Max
  • Alpha阶段项目复审报告
  • 基于PLC的交通灯控制系统设计红绿灯控制博图组态仿真
  • Python第三阶段——PySpark
  • pq|dfs|快排
  • 2025最新!8个AI论文软件测评:研究生写论文痛点全解析
  • Dify 本地开发:前端代理转发解决 401 问题
  • 基于SpringBoot家教中介管理系统(毕设源码+文档)
  • 镜像的创建
  • NX ①添加GC工具箱 ②制图绘制中心线 ③制图倒斜角标注C ④更新重量
  • DPJ-141 基于stm32f103控制器的GPRS定位追踪器设计(源代码+proteus仿真)
  • 事后诸葛分析
  • 当AI Agent学会“打电话“——微软Agent Framework的A2A与AGUI协议深度解析
  • AI Ping 赋能:基于 GLM-4.7(免费!)+ LangChain + Redis 打造智能AI聊天助手
  • 2025银川最新装修改造家政服务中心 TOP5 评测!兴庆区、金凤区、西夏区、贺兰县等地区一站式家庭服务机构权威榜单发布,专业高效助力家居焕新 - 全局中转站
  • 软件基础第四次作业
  • 在Django中安装、配备、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的机制
  • 前端 | 一篇搞懂CSS盒模型核心:padding、margin、border与box-sizing、border-radius
  • 基于SpringBoot的足浴管理系统(毕设源码+文档)
  • 共享指针和独占指针
  • 团队作业6——项目事后分析
  • 断点调式
  • 基于SpringBoot高校迎新管理系统(毕设源码+文档)
  • 2025年拼多多代运营公司十大排名榜单 - 前沿公社
  • [MAUI]简单可食用的PopupTResult
  • Hive - SerDe
  • 乌诺地尔vs酮康唑:防脱洗发水怎么选?关键看你的脱发原因 - 速递信息
  • 华为鸿蒙智家新特性推动行业变革,重塑智能家居生态新格局