news 2026/2/21 18:21:56

pq|dfs|快排

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
pq|dfs|快排

lc1985

简单题 简单做

上堆/快排也行

按字符串长度降序、长度相同则按字典序降序排序数字字符串数组,返回第 k 大的元素。

class Solution {
public:
string kthLargestNumber(vector<string>& nums, int k) {
sort(nums.begin(), nums.end(),
[](string s1, string s2)->bool
{
if(s1.size() != s2.size()) return s1.size() > s2.size(); //先比字符串的长度
else return s1 > s2;//再比字符串的大小
});
return nums[k - 1];//返回第k个大的
}
};

优先队列

class Solution {
private:
static bool cmp(const string& s1, const string& s2) {
if(s1.length() != s2.length()) return s1.length() < s2.length();
for(int i = 0; i < s1.length(); ++i) {
if(s1[i] != s2[i])
return s1[i] < s2[i];
}
return false;
};
public:
string kthLargestNumber(vector<string>& nums, int k) {
priority_queue<string, vector<string>, decltype(&Solution::cmp)> q(cmp);
for(const auto& s: nums)
q.push(s);
while(!q.empty() && --k)
q.pop();
return q.top();
}
};

快排接口 优雅的比较函数😋

class Solution {
public:
static bool cmp(string s1, string s2) {
return s1.size() != s2.size() ? s1.size() > s2.size() : s1 > s2;
}

string kthLargestNumber(vector<string>& nums, int k)

{
nth_element(nums.begin(), nums.begin() + k - 1, nums.end(), cmp);
return nums[k - 1];
}
};

lc3331

感觉就是当图来做的,注意回溯处理

先建树,DFS回溯维护每个字符的最近祖先,把同字符子节点移到最近祖先下重构树

最后DFS统计每个节点的子树大小

class Solution {
public:
vector<int> findSubtreeSizes(vector<int>& parent, string s) {
int n = parent.size();
vector<vector<int>> g(n);
for (int i = 1; i < n; i++)
g[parent[i]].push_back(i);

int ancestor[26];
ranges::fill(ancestor, -1);
auto rebuild = [&](auto&& rebuild, int x) -> void {
int sx = s[x] - 'a';
int old = ancestor[sx];
ancestor[sx] = x;
for (int i = g[x].size() - 1; i >= 0; i--) {
int y = g[x][i];
int anc = ancestor[s[y] - 'a'];
if (anc != -1) {
g[anc].push_back(y);
g[x][i] = -1; // -1 表示删除 y
}
rebuild(rebuild, y);
}
ancestor[sx] = old; // 恢复现场
};
rebuild(rebuild, 0);

vector<int> size(n, 1); // 注意这里已经把 1 算进去了
auto dfs = [&](auto&& dfs, int x) -> void {
for (int y : g[x]) {
if (y != -1) { // y 没被删除
dfs(dfs, y);
size[x] += size[y];
}
}
};
dfs(dfs, 0);
return size;
}
};


class Solution {
public:
vector<int> findSubtreeSizes(vector<int>& parent, string s) {
int n = parent.size();
vector<vector<int>> g(n);
for (int i = 1; i < n; i++)
g[parent[i]].push_back(i);

vector<int> size(n, 1);
int ancestor[26];
ranges::fill(ancestor, -1);


auto dfs = [&](auto&& dfs, int x) -> void {
int sx = s[x] - 'a';
int old = ancestor[sx];
ancestor[sx] = x;
for (int y : g[x]) {
dfs(dfs, y);
int anc = ancestor[s[y] - 'a'];
size[anc < 0 ? x : anc] += size[y];
}
ancestor[sx] = old; // 恢复现场
};
dfs(dfs, 0);
return size;
}
};

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

GLM-4.7 MiniMax M2.1 实测上线:AI Ping 喊你免费体验国产大模型 “硬实力”

【前言】国产大模型又上新 “战场” 了&#xff01;12 月 23 日&#xff0c;清程 AI Ping 平台正式开放GLM-4.7与MiniMax M2.1两款旗舰模型的免费实测 —— 这俩可是当前国产模型在 “工程交付” 与 “Agent 长效运行” 赛道的代表性选手&#xff0c;直接瞄准真实场景的 “长期…

作者头像 李华
网站建设 2026/2/14 3:22:42

python+vue美特超市进销存管理系统_91crh

目录 已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 已开发项目效果实现截图 同行可拿货,招校园代理 pythonvue美特超市进销存管理系统_91crh 开发技术路线…

作者头像 李华
网站建设 2026/2/21 12:09:20

AI论文写作工具Top9:开题报告生成与降重功能详细测评

AI写论文平台排名&#xff1a;9个实测&#xff0c;开题报告论文降重都好用工具对比排名表格工具名称核心功能突出优势Aibiye降AIGC率适配高校规则&#xff0c;AI痕迹弱化Aicheck论文降重速度快&#xff0c;保留专业术语Askpaper论文降重逻辑完整性好秘塔写作猫智能降重结合语法…

作者头像 李华
网站建设 2026/2/17 12:10:56

9个AI论文辅助平台深度测评,开题报告生成和降重功能强大

AI写论文平台排名&#xff1a;9个实测&#xff0c;开题报告论文降重都好用 工具对比排名表格 工具名称 核心功能 突出优势 Aibiye 降AIGC率 适配高校规则&#xff0c;AI痕迹弱化 Aicheck 论文降重 速度快&#xff0c;保留专业术语 Askpaper 论文降重 逻辑完整性好 …

作者头像 李华
网站建设 2026/2/20 13:44:25

nvcr.io 登录方法

docker login nvcr.io用户是固定的&#xff0c;不是某个人的用户Username: $oauthtoken Password: NGC_API_KEY密码是NGC_API_KEY申请NGC_API_KEY方法&#xff1a;访问正确的位置&#xff1a;登录 NVIDIA NGC 官网。https://catalog.ngc.nvidia.com/进入个人设置&#xff1a;点…

作者头像 李华
网站建设 2026/2/22 9:12:54

2025最新!专科生毕业论文必备9大AI论文平台测评

2025最新&#xff01;专科生毕业论文必备9大AI论文平台测评 2025年专科生毕业论文写作工具测评&#xff1a;为什么需要这份榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;越来越多的专科生开始借助AI论文平台来提升写作效率和论文质量。然而&#xff0c;面对市场上琳…

作者头像 李华