5629. 重新格式化电话号码

模拟

注意一些细节,最后位置是否取值。

class Solution {
public:
string reformatNumber(string number) {
string s;
for (auto c: number)
if (c != ' ' && c != '-')
s += c;
string res;
for (int i = 0; i < s.size();) {
if ((int)s.size() - i > 4) res = res + s[i] + s[i + 1] + s[i + 2] + '-', i += 3;
else {
int x = s.size() - i;
if (x == 2) res = res + s[i] + s[i + 1];
else if (x == 3) res = res + s[i] + s[i + 1] + s[i + 2];
else res = res + s[i] + s[i + 1] + '-' + s[i + 2] + s[i + 3];
res += '-';
i += 4;
}
}
res.pop_back();
return res;
}
};

5630. 删除子数组的最大得分

优先队列

class Solution {
public:
deque<int> q;
map<int,int> mp;
int maximumUniqueSubarray(vector<int>& nums) { int num = 0,mn = 0;
for(int i = 0; i < nums.size(); i++){
if(!mp[nums[i]]) mp[nums[i]] = 1;
else {
while(q.size() && nums[q.front()] != nums[i]) mp[nums[q.front()]] = 0,num -= nums[q.front()],q.pop_front();
if(q.size() && nums[q.front()] == nums[i]) num -= nums[q.front()],q.pop_front();
}
q.push_back(i);
num += nums[i];
mn = max(num,mn);
}
return mn;
}
};

1686. 石子游戏 VI

优先队列优化dp

\[\begin{align*}
& dp[i] = max(dp[i-1]~dp[(i-k)] + nums[i]);\\
\end{align*}
\]
class Solution {
public:
//dp[i] = max(dp[i-1]~dp[(i-k)] + nums[i]);
int dp[100000 + 10];
deque<int> q;
int maxResult(vector<int>& nums, int k) {
memset(dp,128,sizeof dp);
int n = nums.size();
dp[0] = nums[0];
q.push_back(0); for(int i = 1; i < n; i ++){
while(i - q.front() > k) q.pop_front();
dp[i] = dp[q.front()] + nums[i];
while(q.size() && dp[q.back()] < dp[i]) q.pop_back();
}
return dp[n-1];
}
};

也可以用multiset优化

class Solution {
public:
int maxResult(vector<int>& nums, int k) {
int n = nums.size();
vector<int> f(n);
multiset<int> S;
f[0] = nums[0];
S.insert(f[0]);
for (int i = 1; i < n; i ++ ) {
if (i - k - 1 >= 0)
S.erase(S.find(f[i - k - 1]));
f[i] = nums[i] + *S.rbegin();
S.insert(f[i]);
}
return f[n - 1];
}
};

5632. 检查边长度限制的路径是否存在

排序 + 并查集

考虑边,对判断和原始边都进行从小到大排序,对满足限制边的原始边进行建图连边,判断是否存在/满足条件的结果。

排序后可以保证小的边限制能满足的情况下,大边同样能满足。

用并查集判断是否存在相应的边即可。

const int MAXN = 1e5 + 50;

int m, Q;
struct Node{ int u, v, w, i; } edge[MAXN], query[MAXN];
bool ans[MAXN];
bool cmp(const Node &a, const Node &b){ return a.w < b.w; } int father[MAXN];
int getFather(int x){ return father[x] = (father[x] == x ? x: getFather(father[x])); }
void mergeFather(int x, int y){
int fx = getFather(x), fy = getFather(y);
if (fx == fy) return;
if (fx > fy) swap(fx, fy);
father[fx] = fy;
} class Solution {
public:
vector<bool> distanceLimitedPathsExist(int n, vector<vector<int>>& edgeList, vector<vector<int>>& queries) {
m = edgeList.size(); Q = queries.size(); for (int i = 0; i < m; i++){
edge[i].u = edgeList[i][0];
edge[i].v = edgeList[i][1];
edge[i].w = edgeList[i][2];
}
for (int i = 0; i < Q; i++){
query[i].u = queries[i][0];
query[i].v = queries[i][1];
query[i].w = queries[i][2];
query[i].i = i;
} sort(edge, edge + m, cmp); sort(query, query + Q, cmp); for (int i = 0; i <= n; i++) father[i] = i;
for (int i = 0, k = 0; i < Q; i++){
while(k < m && edge[k].w < query[i].w) {
mergeFather(edge[k].u, edge[k].v);
k++;
}
ans[query[i].i] = (getFather(query[i].u) == getFather(query[i].v));
} vector<bool> ret;
for (int i = 0; i < Q; i++) ret.push_back(ans[i]);
return ret;
}
};

Leetcode 220 周赛 题解的更多相关文章

  1. LeetCode #188场周赛题解

    A题链接 给你一个目标数组 target 和一个整数 n.每次迭代,需要从 list = {1,2,3..., n} 中依序读取一个数字. 请使用下述操作来构建目标数组 target : Push:从 ...

  2. LeetCode第29场双周赛题解

    第一题 用一个新数组newSalary保存去掉最低和最高工资的工资列表,然后遍历newSalary,计算总和,除以元素个数,就得到了平均值. class Solution { public: doub ...

  3. LeetCode双周赛#33 题解

    5480. 可以到达所有点的最少点数目 #贪心 题目链接 题意 给定有向无环图,编号从0到n-1,一个边集数组edges(表示从某个顶点到另一顶点的有向边),现要找到最小的顶点集合,使得从这些点出发, ...

  4. Leetcode 双周赛#32 题解

    1540 K次操作转变字符串 #计数 题目链接 题意 给定两字符串\(s\)和\(t\),要求你在\(k\)次操作以内将字符串\(s\)转变为\(t\),其中第\(i\)次操作时,可选择如下操作: 选 ...

  5. ACM团队周赛题解(1)

    这次周赛题目拉了CF315和CF349两套题. 因为我代码模板较长,便只放出关键代码部分 #define ll long long #define MMT(s,a) memset(s, a, size ...

  6. 「LeetCode」全部题解

    花了将近 20 多天的业余时间,把 LeetCode 上面的题目做完了,毕竟还是针对面试的题目,代码量都不是特别大,难度和 OJ 上面也差了一大截. 关于二叉树和链表方面考察变成基本功的题目特别多,其 ...

  7. C#版 - Leetcode 65. 有效数字 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...

  8. [LeetCode] Three Sum题解

    Three Sum: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? ...

  9. Leetcode的SQL题解:185. 部门工资前三高的员工

    题目 查询部门工资前三高的员工. 我用的数据库是oracle. 下面是数据表的信息. Employee表数据: | ID | NAME | Salary | DepartmentId | | -- | ...

随机推荐

  1. 从执行上下文角度重新理解.NET(Core)的多线程编程[1]:基于调用链的”参数”传递

    线程是操作系统能够进行运算调度的最小单位,操作系统线程进一步被封装成托管的Thread对象,手工创建并管理Thread对象已经成为了所能做到的对线程最细粒度的控制了.后来我们有了ThreadPool, ...

  2. redlock分布式锁真的安全吗

    此文是对http://zhangtielei.com/posts/blog-redlock-reasoning-part2.html文章的个人归纳,如有问题请联系删除 什么是redlock redlo ...

  3. Java基础教程——线程同步

    线程同步 synchronized:同步的 例:取钱 不做线程同步的场合,假设骗子和户主同时取钱,可能出现这种情况: [骗子]取款2000:账户余额1000 [户主]取款2000:账户余额1000 结 ...

  4. Java基础教程——变量

    变量 变量(variable)可以理解为一个"有名称的容器",用于装各种不同类型的数据.编程人员通过对变量的访问和修改,操作内存中的数据. 对变量的理解:https://www.c ...

  5. A:与指定数字相同的数的个数

    总时间限制:  1000ms 内存限制:  65536kB 描述 输出一个整数序列中与指定数字相同的数的个数. 输入 输入包含三行:第一行为N,表示整数序列的长度(N <= 100):第二行为N ...

  6. java46

    1.迭代器遍历 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public c ...

  7. 最新小样本学习综述 A Survey on Few-Shot Learning | 四大模型Multitask Learning、Embedding Learning、External Memory…

    目录 原文链接: 小样本学习与智能前沿 01 Multitask Learning 01.1 Parameter Sharing 01.2 Parameter Tying. 02 Embedding ...

  8. moviepy音视频开发:音频合成类CompositeAudioClip介绍

    ☞ ░ 前往老猿Python博文目录 ░ CompositeAudioClip是AudioClip的直接子类,用于将几个音频剪辑合成为一个音频剪辑.CompositeAudioClip类只有一个构造方 ...

  9. 第7.12节 可共享的Python类变量

    第7.12节 可共享的Python类变量 一.    引言 在上节已经引入介绍了类变量和实例变量,类体中定义的变量为类变量,默认属于类本身,实例变量是实例方法中定义的self对象的变量,对于每个实例都 ...

  10. 第9.7节 Python使用write函数写入文件内容

    一. 语法 write(data) data为要写入的数据,可以为字符串str类型,也可以是bytes类型. 返回值为实际写入的数据数,在写入数据为str类型时,该数据为实际写入的UNIOCODE字符 ...