访问所有点的最小时间

不难看出,从点(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 取余。

\[dp[i][j] = dp[i-1][j] + dp[i-1][j-1] + dp[i-1][j+1]
\]

其中,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 场周赛的更多相关文章

  1. LeetCode 第 165 场周赛

    LeetCode 第 165 场周赛 5275. 找出井字棋的获胜者 5276. 不浪费原料的汉堡制作方案 5277. 统计全为 1 的正方形子矩阵 5278. 分割回文串 III C 暴力做的,只能 ...

  2. Leetcode第 217 场周赛(思维量比较大)

    Leetcode第 217 场周赛 比赛链接:点这里 做完前两题我就知道今天的竞赛我已经结束了 这场比赛思维量还是比较大的. 1673. 找出最具竞争力的子序列 题目 给你一个整数数组 nums 和一 ...

  3. Leetcode 第133场周赛解题报告

    今天参加了leetcode的周赛,算法比赛,要求速度比较快.有思路就立马启动,不会纠结是否有更好的方法或代码可读性.只要在算法复杂度数量级内,基本上是怎么实现快速就怎么来了. 比赛时先看的第二题,一看 ...

  4. LeetCode第151场周赛(Java)

    这是我第一次写周赛的题目,而且还是虚拟的.从这次起,以后就将所有错过的题目都写到博客来.当然既然是我错的,那代码肯定不是我自己的.我会注明来源.并且我会自己敲一遍.多总结总是没坏处的. 另外比较糟糕的 ...

  5. LeetCode第152场周赛(Java)

    这算是我第一次正式参加 LeetCode 的周赛吧.通过两道题.意料之中(通过上次模拟可以看出来).总的来说,脑袋还是不太灵光.想的有点慢.全球第一名 0:10:19 就全部通过...感觉我的智商被狠 ...

  6. Leetcode 第137场周赛解题报告

    今天的比赛的题目相对来说比较「直白」,不像前几周都是一些特定的算法,如果你没学过不可能想出来. 做了这些周,对leetcode比赛的题目也发现了一些「规律」. 一般前两道题都很「简单」,只要有想法,直 ...

  7. LeetCode 第 150 场周赛

    一.拼写单词(LeetCode-1160) 1.1 题目描述 1.2 解题思路 由于给定的chars,每个字母只能用一次,所以用大小为26的数组charsArray来表示a-z(例如charsArra ...

  8. LeetCode 第 196 场周赛 (题目:5452-5455,这是参加过最坑的周赛,暴力n^2居然可以过)

    5452. 判断能否形成等差数列   给你一个数字数组 arr . 如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 . 如果可以重新排列数组形成等差数列,请返回 tru ...

  9. Leetcode 第136场周赛解题报告

    周日的比赛的时候正在外面办事,没有参加.赛后看了下题目,几道题除了表面要考的内容,还是有些能发散扩展的地方. 做题目不是最终目的,通过做题发现知识盲区,去研究学习,才能不断提高. 理论和实际是有关系的 ...

随机推荐

  1. [POI2010]MOT-Monotonicity 2

    洛谷题目链接 动态规划$+$线段树 题目链接(洛谷) 首先,先要明确一点,当我们填了第$i$位时,自然下一位的符号也就出来了 那么我们可以分情况讨论: $1.$当下一位是$>$时:我们可以建一棵 ...

  2. date/clock/hwclock/cal

    date 显示日期与时间 date +%Y/%m/%d/%H:%M 2018/10/08/17:35 格式化输出 时间的设置 查看时区 date -R 时间戳转化 time1=$(date +%s - ...

  3. 深入理解D3D9

    本文写的较为深入,故转载在此留以备案,呵呵~ 原文链接为:http://www.cnblogs.com/effulgent/archive/2009/02/10/1387438.html ------ ...

  4. 简记乘法逆元(费马小定理+扩展Euclid)

    乘法逆元 什么是乘法逆元? 若整数 \(b,m\) 互质,并且\(b|a\) ,则存在一个整数\(x\) ,使得 \(\frac{a}{b}\equiv ax\mod m\) . 称\(x\) 是\( ...

  5. C语言问答九问

    C语言问题观: 一.环境搭建问题:linux,(可以是w10下linux子系统):vim(notepad++),gcc编译器,gdb调试器,make自动编译工具,ddd分析工具和valgrind分析工 ...

  6. Mysql触发器详解以及union的使用

    ---恢复内容开始--- Mysql触发器定义: 当一个表中有insert update delete事件发生,触发一个事件,执行一段代码.作用: 同步数据创建: create trigger 名称 ...

  7. List和Set 总结

    一 List三个子类的区别和应用场景 Vector:底层是数组,查询快,增删慢 Arraylist:底层是数组,查询块,增删慢 LinkedList:底层是链表,查询慢,增删快 效率: Vector: ...

  8. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_11-freemarker静态化测试-基于模板字符串静态化

    再定义一个测试方法 把拿到的字符串变成模板 加载器设置好了以后, 加一个断点来测试 生成模板文件 上面这种方式很灵活. 最终代码 @Test public void testGenerateHtmlB ...

  9. Qt编写自定义控件30-颜色多态按钮

    一.前言 这个控件一开始打算用样式表来实现,经过初步的探索,后面发现还是不够智能以及不能完全满足需求,比如要在此控件设置多个角标,这个用QSS就很难实现,后面才慢慢研究用QPainter来绘制,我记得 ...

  10. 查看oracle数据库的链接数和用户

    http://www.cnblogs.com/is1988/archive/2012/11/21/2780067.html 1.查询oracle的连接数select count(*) from v$s ...