LeetCode 第 164 场周赛
访问所有点的最小时间
不难看出,从点(x1,y1) 到 (x2,y2) 的步数需要 min(dx,dy),其中 dx = abs(x1-x2),dy = abs(y1-y2)
class Solution {
public:
int minTimeToVisitAllPoints(vector<vector<int>>& points) {
int ans(0);
int x = points[0][0],y = points[0][1];
for(int i = 1,sz = points.size();i < sz;++i){
ans += dis(x,y,points[i][0],points[i][1]);
x = points[i][0],y = points[i][1];
}
return ans;
}
int dis(int x,int y,int x2,int y2){
return max(abs(x-x2),abs(y-y2));
}
};
统计参与通信的服务器
题意:给你一个 01 矩阵,求其中哪些 1 所在的行、列和大于1
class Solution {
public:
int countServers(vector<vector<int>>& grid) {
int n = grid.size(), m = grid[0].size();
bool vis[n][m];
memset(vis,0,sizeof(vis));
for(int i = 0;i < n;++i){
queue<int>que;
for(int j = 0;j < m;++j) if(grid[i][j]) que.push(j);
if(que.size() > 1){
while(!que.empty()){
int u = que.front();que.pop();
vis[i][u] = true;
}
}
}
for(int i = 0;i <m; ++i){
queue<int>que;
for(int j = 0;j < n;++j) if(grid[j][i]) que.push(j);
if(que.size() > 1){
while(!que.empty()){
int u = que.front();que.pop();
vis[u][i] = true;
}
}
}
int ans(0);
for(int i = 0;i < n;++i) for(int j = 0;j < m;++j) if(vis[i][j]) ans++;
return ans;
}
};
上面的做法是每行(列)计数后标记对应点,最后统计。可以用row[],col[]来统计个数优化一下。
class Solution {
public:
int countServers(vector<vector<int>>& grid) {
int n = grid.size(),m = grid[0].size();
int row[n] = {0},col[m] = {0};
for(int i = 0;i < n;++i) for(int j = 0;j < m;++j)
if(grid[i][j]) row[i]++,col[j]++;
int ans(0);
for(int i = 0;i < n;++i) for(int j = 0;j < m;++j)
if(grid[i][j] && (row[i] > 1 || col[j] > 1)) ans ++;
return ans;
}
};
搜索推荐系统
题意:给定一个查询串 searchWord,对其每个前缀求同前缀模板串(个数多于3则输出字典序最小的 3 个)
class Solution {
public:
vector<vector<string>> suggestedProducts(vector<string>& products, string searchWord) {
map<string,priority_queue<string,vector<string>,less<string> > >p;
for(auto i :products){
for(int j = 1;j <= i.length();++j){
string subs = i.substr(0,j);
if(p.find(subs) == p.end()){
priority_queue<string,vector<string>,less<string>> que;
p.insert(make_pair(subs,que));
}
p[subs].push(i);
if(p[subs].size() > 3) p[subs].pop();
}
}
vector<vector<string>> ans(searchWord.length());
for(int j = 1, sz = searchWord.length();j <= sz;++j){
string subs = j == sz ? searchWord :searchWord.substr(0,j);
map<string,priority_queue<string> > ::iterator ret = p.find(subs);
if(ret != p.end()){
priority_queue<string,vector<string>,less<string> >que = (ret->second);
while(que.size() > 0){
ans[j-1].push_back(que.top());que.pop();
}
reverse(ans[j-1].begin(),ans[j-1].end());
}
}
//*/
return ans;
}
};
停在原地的方案数
题意:长度为 arrLen 的数组,开始在 0 处,每次可左移、右移、不动(不能移动到边界之外)。求 steps 步之后仍在 0 处的方案数,对 1e9+7 取余。
\]
其中,i 表示当前步数,j 表示当前位置
class Solution {
public:
static const int maxn = 5e2+7;
static const long long MOD = 1e9+7;
int dp[maxn][maxn];
int numWays(int steps, int arrLen) {
arrLen = min(steps,arrLen);
dp[0][0] = 1;
for(int i = 1;i <= steps;++i){
for(int j = 0;j < arrLen;++j){
dp[i][j] = dp[i-1][j];
if(j > 0) dp[i][j] = (dp[i][j] + dp[i-1][j-1])%MOD;
if(j < arrLen-1) dp[i][j] = (dp[i][j] + dp[i-1][j+1])%MOD;
}
}
return dp[steps][0];
}
};
LeetCode 第 164 场周赛的更多相关文章
- LeetCode 第 165 场周赛
LeetCode 第 165 场周赛 5275. 找出井字棋的获胜者 5276. 不浪费原料的汉堡制作方案 5277. 统计全为 1 的正方形子矩阵 5278. 分割回文串 III C 暴力做的,只能 ...
- Leetcode第 217 场周赛(思维量比较大)
Leetcode第 217 场周赛 比赛链接:点这里 做完前两题我就知道今天的竞赛我已经结束了 这场比赛思维量还是比较大的. 1673. 找出最具竞争力的子序列 题目 给你一个整数数组 nums 和一 ...
- Leetcode 第133场周赛解题报告
今天参加了leetcode的周赛,算法比赛,要求速度比较快.有思路就立马启动,不会纠结是否有更好的方法或代码可读性.只要在算法复杂度数量级内,基本上是怎么实现快速就怎么来了. 比赛时先看的第二题,一看 ...
- LeetCode第151场周赛(Java)
这是我第一次写周赛的题目,而且还是虚拟的.从这次起,以后就将所有错过的题目都写到博客来.当然既然是我错的,那代码肯定不是我自己的.我会注明来源.并且我会自己敲一遍.多总结总是没坏处的. 另外比较糟糕的 ...
- LeetCode第152场周赛(Java)
这算是我第一次正式参加 LeetCode 的周赛吧.通过两道题.意料之中(通过上次模拟可以看出来).总的来说,脑袋还是不太灵光.想的有点慢.全球第一名 0:10:19 就全部通过...感觉我的智商被狠 ...
- Leetcode 第137场周赛解题报告
今天的比赛的题目相对来说比较「直白」,不像前几周都是一些特定的算法,如果你没学过不可能想出来. 做了这些周,对leetcode比赛的题目也发现了一些「规律」. 一般前两道题都很「简单」,只要有想法,直 ...
- LeetCode 第 150 场周赛
一.拼写单词(LeetCode-1160) 1.1 题目描述 1.2 解题思路 由于给定的chars,每个字母只能用一次,所以用大小为26的数组charsArray来表示a-z(例如charsArra ...
- LeetCode 第 196 场周赛 (题目:5452-5455,这是参加过最坑的周赛,暴力n^2居然可以过)
5452. 判断能否形成等差数列 给你一个数字数组 arr . 如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 . 如果可以重新排列数组形成等差数列,请返回 tru ...
- Leetcode 第136场周赛解题报告
周日的比赛的时候正在外面办事,没有参加.赛后看了下题目,几道题除了表面要考的内容,还是有些能发散扩展的地方. 做题目不是最终目的,通过做题发现知识盲区,去研究学习,才能不断提高. 理论和实际是有关系的 ...
随机推荐
- Gym - 102307C Common Subsequence 搞不懂的dp
Gym - 102307C Common Subsequence 题意:给你两个相同长度的DNA序列,判断这两个的最长公共子序列长度是不是0.99*n,n为序列的长度(n<=1e5). 嗯,正常 ...
- 【线性代数】6-1:特征值介绍(Introduction to Eigenvalues)
title: [线性代数]6-1:特征值介绍(Introduction to Eigenvalues) categories: Mathematic Linear Algebra keywords: ...
- 关于scala
对函数式编程感兴趣了 雪下scala吧
- 创建jQuery节点对象
现在的年轻人,经历旺盛,每天都熬夜,今天又晚了,现在才更新博客,今天更新jquery入门之对节点的操作,内容简单好掌握.认真的燥再来吧. 1.$("<li class="li ...
- postgre-插入数据时的单引号问题
场景: 将一个HTML页面存储到数据库中 问题: HTML页面中既包含单引号也包含双引号 解决办法: 双单引号 INSERT INTO table VALUES ('<html><s ...
- zabbix监控windows案例
首先在zabbix官网下载zabbix软件包:https://www.zabbix.com/ 下载完成之后,将其解压到D盘 # 配置与安装,配置zabbix agent相关配置. 找到conf下的配置 ...
- CTF辅助脚本
首先推荐这篇文章,网上有多次转载,这是我见过日期比较早的 CTF中那些脑洞大开的编码和加密 凯撒密码 flag='flag{abcdef}' c='' n=20 for i in flag: if ' ...
- 冲刺阶段——Day5
[今日进展] 完成注册功能代码 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionLi ...
- 交互式绘图工具gunplot
Gnuplot是一个命令行的交互式绘图工具(command-driven interactive function plotting program).用户通过输入命令,可以逐步设置或修改绘图环境,并 ...
- 五一 DAY 5
五一 DAY 5 V 点 1----n E 边 /* Given a graph with N nodes and M unidirectional edges. Each edge e_i ...