第88场周赛
时间:2022-07-28
本文章向大家介绍第88场周赛,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
848. 字母移位
题解:根据描述,第一反应模拟这个过程,超时。
string shiftingLetters(string S, vector<int>& shifts)
{
for(int i=0;i<shifts.size();i++)
{
S = shiftStr(S,shifts[i],i);
}
return S;
}
string shiftStr(string &s,int shift,int end)
{
shift%=26;
for(int i=0;i<s.length()&&i<=end;i++)
{
s[i] ='a' + (s[i]-'a'+shift)%26;
}
return s;
}
第二反应:根据上述这个模拟超时过程,想一优化,shifts数组后面开始,逐个偏移,根据描述,后面的偏移会加到前面。于是有了后缀和这一说法。
string shiftingLetters(string S, vector<int>& shifts) {
for(int i=shifts.size()-2;i>=0;--i){
shifts[i]%=26;
shifts[i]+=shifts[i+1];
//计算后缀和
}
for(int i=0;i<S.size();i++){
S[i] ='a' + (S[i]-'a'+shifts[i])%26;
}
return S;
}
849. 到最近的人的最大距离
题解:根据描述,本题可转换为最长连续0的长度。分三种情况,一开始就连续的0(左边无1),在中间连续的0(指0的左右都有1),在末尾连续的0(右边无1).
int maxDistToClosest(vector<int>& seats) {
int N = seats.size();
int K = 0;
int ret = 0;
for (int i = 0; i < N; ++i)
{//统计中间0的长度,
if (seats[i] == 1)
K = 0;
else
{
K++;
ret = max(ret, (K + 1) / 2);
}
}
for (int i = 0; i < N; ++i)
{//统计第一种情况
if (seats[i] == 1)
{
ret = max(ret, i);
break;
}
}
for (int i = N-1; i >= 0; --i)
{//统计第三种情况
if (seats[i] == 1)
{
ret = max(ret, N - 1 - i);
break;
}
}
return ret;
}
851. 喧闹和富有
题解:根据描述,好像描述有点复杂,上图。
依据谁比谁更穷(比如0号选手比1号选手穷)这样的关系,构建了一个有向图。旁边红字对应的是每位选手的安静值。题目的意思就是把每位选手的安静值更新为所有比他富有的选手的安静值中,最小值对应的选手,怎么办?模拟图的深搜过程,假设DFS(i)表示所有比i号选手富有的选手的最小安静值对应的选手。那么,写成代码
vector<int>answer;
vector<vector<int>>graph;
vector<int> loudAndRich(vector<vector<int>>& richer, vector<int>& quiet)
{
int N = quiet.size();
for(int node=0;node<N;++node)
{//邻接表初始化
vector<int>v;
graph.push_back(v);
answer.push_back(-1);
}
for(auto i:richer)
graph[i[1]].push_back(i[0]);
//邻接表赋值
for(int node=0;node<N;node++)
dfs(node,quiet);
return answer;
}
int dfs(int node,vector<int>&quiet)
{
if (answer[node] == -1)
{
answer[node] = node;
for (int child: graph[node])
{
int cand = dfs(child,quiet);
if (quiet[cand] < quiet[answer[node]])
answer[node] = cand;
}
}
return answer[node];
}
850. 矩形面积 II
不会,待填坑,开始复习简历上的内容了。
- Angular企业级开发(8)-控制器的作用域
- 使用jQuery Draggable和Droppable实现拖拽功能
- CSS魔法堂:重拾Border之——图片作边框
- Mobile Web中URL设计问题
- 使用root用户连接Ubuntu16.04时,提示SSH连接被拒绝
- CSS魔法堂:Box-Shadow没那么简单啦:)
- java操作redis: 将string、list、map、自定义的对象保存到redis中
- 运行第一个Docker容器-Docker for Web Developers(1)
- 手动实现jQuery Tools里面tab功能
- Angular企业级开发(9)-前后端分离之后添加验证码
- 基于thrift的微服务框架
- Sublime Text 快速格式化
- HTML中拖放介绍
- 打造高效前端工作环境 - tmux
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 引入 SB Admin 2 作为后台管理系统主题
- Laravel Jetstream是什么以及如何入门?
- Bash基础训练指南
- 基于NodeJS从零构建线上自动化打包工作流
- 如何实现H5可视化编辑器的实时预览和真机扫码预览功能
- LeetCode67|二分查找
- LeetCode66|二叉树的最小深度
- LeetCode65|回文链表
- LeetCode64|茴香豆???
- WEB安全学习二、注入工具 sqlmap的使用
- LeetCode63|香山碧云寺云碧山香
- LeetCode62|数组形式的整数加法
- LeetCode61|字符串相加
- LeetCode60|反转字符串
- Python | Flask 解决跨域问题