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. PDF编辑:pdfFactory文本备注功能详解

    除了word的doc文件外,PDF也是我们经常接触到的文件格式,经常需要在pdf文件上进行编辑与修改,或者给内容做提示和备注. 文件的文本备注功能可以用pdfFactory来进行,编辑打印PDF一条龙 ...

  2. 思维导图软件iMindMap:生活工作的好帮手

    思维导图iMindMap这样的好帮手在生活工作中能帮你打破困境,,至于它有哪些力所能及的事情就是下面小编要跟你讲的: 你是否经常遇到过这样的情况: 作为学生,你觉得学习紧张,虽然三更眠五更起,还是成绩 ...

  3. Vim常用按键

  4. C语言讲义——dll调用

    DLL:Dynamic Link Library,动态链接库.一个应用程序可使用多个DLL文件,一个DLL文件也可以被不同的应用程序使用. 先新建一个dll项目 再创建C项目进行调用 #include ...

  5. LaTex中的中文处理方法

    相关代码与注释: 显示效果:

  6. JDK7HashMap

    JDK7HashMap 成员变量 HashMap中定义了非常多的成员变量以及常量,各成员变量含义具体如下: //默认初始化长度-16 static final int DEFAULT_INITIAL_ ...

  7. 思维导图学 Kotlin

    前言 最近做了<Kotlin实战>的思维导图笔记,Kotlin真香-- 目录 基础 函数 类.对象 λ表达式 类型 约定 高阶函数.泛型 公众号 coding 笔记.点滴记录,以后的文章也 ...

  8. 基于spring@aspect注解的aop实现

    第一步:编写切面类 package com.dascom.hawk.app.web.tool; import org.aspectj.lang.JoinPoint; import org.aspect ...

  9. PyQt(Python+Qt)学习随笔:QTabWidget选项卡部件移除选项卡的removeTab和clear方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 要从一个QTabWidget中去除选项卡,可用使用removeTab和clear方法. 1.移除选项 ...

  10. PyQt(Python+Qt)学习随笔:QTreeView树形视图的sortingEnabled属性

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTreeView树形视图的sortingEnabled属性用于控制视图中的数据是否启用按表头排序, ...