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场周赛解题报告
周日的比赛的时候正在外面办事,没有参加.赛后看了下题目,几道题除了表面要考的内容,还是有些能发散扩展的地方. 做题目不是最终目的,通过做题发现知识盲区,去研究学习,才能不断提高. 理论和实际是有关系的 ...
随机推荐
- 【概率论】2-2:独立事件(Independent Events)
title: [概率论]2-2:独立事件(Independent Events) categories: Mathematic Probability keywords: Independent Ev ...
- 如何在vue中使用svg
1.安装依赖 npm install svg-sprite-loader --save-dev 2.在config文件中配置 const path = require('path'); func ...
- 基于 intellij IDEA 快速搭建Spring Boot项目
在<一步步搭建 Spring Boot maven 框架的工程>一文中,已经介绍了如何使用Eclipse快速搭建Spring Boot项目.由于最近将开发工具由Eclipse ...
- [Java]借助PrintWriter类和StringWriter类,取出异常堆栈信息放入字符串中
在程序开发中,有时我们不仅需要将异常堆栈信息打印在控制台里或是log里,可能还需要将它存在String中,再送到合适的地方,如错误页面,数据库等. 要取异常堆栈信息,具体的函数就是: /** * Ge ...
- features its own
Gulp.js features its own built-in watch() method - no external plugin required ---- However, the Arn ...
- C++ STL 排序
#include <iostream>#include <algorithm>#include <deque>#include <vector>#inc ...
- Linux云服务器磁盘不见了?解决方案在这里,云服务器磁盘挂载
用过诸多种云以后,发现有个通病,就是新买的数据盘在机器中找不到.本篇总结一下此类问题的解决方法,望各位点赞,有问题评论区见 一.云服务和物理机一样,你买了云服务器的数据盘以后,就相当于把数据盘直接安装 ...
- python执行系统命令后获取返回值的几种方式集合
python执行系统命令后获取返回值的几种方式集合 今天小编就为大家分享一篇python执行系统命令后获取返回值的几种方式集合,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 第一种情 ...
- Redis CrackIT 入侵事件引发Linux 沦陷
▲针对全球6379端口的redis服务器做了扫描,结果如上图 如图开放在公网的redis的6379端口的ip总数有63443个.无密码认证的IP有43024个,在总数占比里达到67%.发现遭受到red ...
- 为Django添加图片验证码
可直接复制到Django项目中使用 # author:sunshine from django.http import HttpResponse from PIL import Image, Imag ...