news 2026/3/8 3:23:32

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/3/7 8:54:53

v-if 和 v-for 的优先级是什么?

一、结论先行 在 Vue 2 中&#xff0c;当 v-if 与 v-for 同时作用于同一个元素时&#xff0c;v-for 的优先级高于 v-if。 这意味着&#xff1a;会先执行循环&#xff0c;再对每一项进行条件判断。 但需要注意&#xff1a;Vue 官方明确不推荐将两者写在同一元素上&#xff0c;因…

作者头像 李华
网站建设 2026/3/7 8:54:51

基于微信小程序的丽江市旅游分享平台系统毕设源码+文档+讲解视频

前言 本课题聚焦游客获取丽江旅游信息碎片化、优质攻略稀缺及旅友交流不畅等痛点&#xff0c;设计开发基于微信小程序的丽江市旅游分享平台系统。系统依托微信生态高普及率与便捷传播优势&#xff0c;整合丽江旅游资源分享、攻略交流、行程规划等核心场景&#xff0c;涵盖丽江景…

作者头像 李华
网站建设 2026/3/7 8:54:49

学术写作必备:9个AI平台实测对比,轻松搞定论文从开题到降重

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

作者头像 李华
网站建设 2026/3/1 1:23:48

mpv播放器如何快速配置:Windows用户完整入门指南

mpv播放器如何快速配置&#xff1a;Windows用户完整入门指南 【免费下载链接】mpv-config 本项目为 windows 下 mpv 播放器的配置文件 (This project is the configuration file of mpv player on Windows) 项目地址: https://gitcode.com/gh_mirrors/mp/mpv-config 想要…

作者头像 李华
网站建设 2026/3/2 15:12:08

python+vue篮球人才球员管理系统vue

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

作者头像 李华