LeetCode第 283 场周赛题解
作者:@cherish.
课程学习内容为作者从学校的PPT处摘抄,仅供自己学习参考,若需转载请注明出处:https://www.cnblogs.com/cherish-/p/15971186.html
6016. Excel 表中某个范围内的单元格
题目描述:自己读题
思路:根据题意模拟即可
时间复杂度:
参考代码:
class Solution {
public:
vector<string> cellsInRange(string s) {
vector<string> res;
int lr = s[0] - 'A', rs = s[3] - 'A';
int len1 = s[1] - '0' , len2 = s[4] - '0';
for(int i = lr ; i <= rs ; ++i){
for(int j = len1 ; j <= len2 ; ++j){
string str = (char)('A' + i) + to_string(j);
res.push_back(str);
}
}
return res;
}
};
6017. 向数组中追加 K 个整数
题目描述:给你一个数组,让你添加个不在中出现的数字,并且使得这个数字的和最小。
思路:比较明显的贪心,先假定最终添加的是,然后根据其中的数字是否在中出现过进行修改即可。
时间复杂度:
参考代码:
class Solution {
public:
long long minimalKSum(vector<int>& nums, int k) {
long long res = 1ll * k * (k + 1) / 2;
set<int>s;
for(int& num : nums) s.insert(num) ;
for(auto& val : s){
if(val > k) break;
if(val <= k) res -= val;
++k;
res += k;
}
return res;
}
};
6018. 根据描述创建二叉树
题目描述:给定父子关系,根据父子关系构建二叉树,保证有解。
思路:根据题意模拟即可
时间复杂度:
参考代码:
class Solution {
public:
TreeNode* createBinaryTree(vector<vector<int>>& descriptions) {
vector<TreeNode*> tr(100005 , nullptr);
vector<int>income(100005 , 0), outcome(100005 , 0);
set<int>s;
for(auto& des : descriptions){
int u = des[0] , v = des[1] , w = des[2];
if(tr[u] == nullptr) tr[u] = new TreeNode(u , nullptr , nullptr);
if(tr[v] == nullptr) tr[v] = new TreeNode(v , nullptr , nullptr);
if(w == 0) tr[u]->right = tr[v];
else tr[u]->left = tr[v];
income[v]++;
outcome[u]++;
s.insert(u);
s.insert(v);
}
int rt = 0;
for(auto& v : s){
if(income[v] != 0 || outcome[v] == 0) continue;
rt = v;
break;
}
return tr[rt];
}
};
6019. 替换数组中的非互质数
题目描述:给你一个整数数组 nums
。请你对数组执行下述操作:
- 从
nums
中找出 任意 两个 相邻 的 非互质 数。 - 如果不存在这样的数,终止 这一过程。
- 否则,删除这两个数,并 替换 为它们的 最小公倍数(Least Common Multiple,LCM)。
- 只要还能找出两个相邻的非互质数就继续 重复 这一过程。
返回修改后得到的 最终 数组。可以证明的是,以 任意 顺序替换相邻的非互质数都可以得到相同的结果。
思路:比较明显的模拟,使用栈维护一下即可。我为了输出方便使用了双端队列。
时间复杂度:
参考代码:
class Solution {
public:
vector<int> replaceNonCoprimes(vector<int>& nums) {
deque<long long>q;
for(auto& num : nums){
if(q.empty()) q.push_back(num);
else{
int u = q.back();
int gd = gcd(u , num);
if(gd == 1) q.push_back(num);
else{
q.pop_back();
long long dx = 1ll * u * num / gd;
while(!q.empty() && gcd(dx , q.back()) != 1){
u = q.back();
q.pop_back();
dx = 1ll * dx * u / gcd(dx , 1ll * u);
}
q.push_back(dx);
}
}
}
vector<int>res;
while(!q.empty()){res.push_back(q.front()); q.pop_front();}
return res;
}
};
作者:cherish.
出处:https://home.cnblogs.com/u/cherish-/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
分类:
LeetCode周赛
标签:
LeetCode周赛
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人