【Leetcode第285场周赛】——周赛总结
1、6027. 统计数组中峰和谷的数量 - 力扣(LeetCode) (leetcode-cn.com)
给你一个下标从 0 开始的整数数组 nums 。如果两侧距 i 最近的不相等邻居的值均小于 nums[i] ,则下标 i 是 nums 中某个峰的一部分。类似地,如果两侧距 i 最近的不相等邻居的值均大于 nums[i] ,则下标 i 是 nums 中某个谷的一部分。对于相邻下标 i 和 j ,如果 nums[i] == nums[j] , 则认为这两下标属于 同一个 峰或谷。
注意,要使某个下标所做峰或谷的一部分,那么它左右两侧必须 都 存在不相等邻居。
返回 nums 中峰和谷的数量。
模拟题,直接按题意来就行了,注意题中要找的是不相等的邻居。需要排除掉相等邻居的情况。
class Solution {
public:
int countHillValley(vector<int>& nums) {
int n=nums.size();
int sumP=0,sumV=0;
for(int i=1;i<n-1;i++){
int j=i-1,k=i+1;
if(nums[i]==nums[i-1])
continue;
if(nums[k]==nums[i]){
while(k<n-1){
if(nums[k]!=nums[i])
break;
k++;
}
}
if(nums[j]==nums[i]){
while(j>0){
if(nums[j]!=nums[i])
break;
j--;
}
}
if(nums[i]>nums[k]&&nums[i]>nums[j])
sumP++;
if(nums[i]<nums[k]&&nums[i]<nums[j])
sumV++;
}
return sumV+sumP;
}
};
2、6028. 统计道路上的碰撞次数 - 力扣(LeetCode) (leetcode-cn.com)
在一条无限长的公路上有 n 辆汽车正在行驶。汽车按从左到右的顺序按从 0 到 n - 1 编号,每辆车都在一个 独特的 位置。
给你一个下标从 0 开始的字符串 directions ,长度为 n 。directions[i] 可以是 'L'、'R' 或 'S' 分别表示第 i 辆车是向 左 、向 右 或者 停留 在当前位置。每辆车移动时 速度相同 。
碰撞次数可以按下述方式计算:
当两辆移动方向 相反 的车相撞时,碰撞次数加 2 。
当一辆移动的车和一辆静止的车相撞时,碰撞次数加 1 。
碰撞发生后,涉及的车辆将无法继续移动并停留在碰撞位置。除此之外,汽车不能改变它们的状态或移动方向。
返回在这条道路上发生的 碰撞总次数 。
这个题在周赛时没想明白,就一直卡在这里。。。其实就是个脑筋急转弯:在最左边的L和最右边的R永远不会发生碰撞,所以在排除最左侧的所有L和最右侧的所有R后,中间所有的车都会发生碰撞。
根据题意,“RL”碰撞次数+2————>有两辆车被撞停
”RS“ or ”SL“碰撞次数+1——>有一辆车被撞停
所以我们直接统计中间的所有运动车辆即可。
class Solution {
public:
int countCollisions(string directions) {
int n=directions.length();
int l=0,r=n-1;
while(l<=r&&directions[l]=='L') l++;
while(l<=r&&directions[r]=='R') r--;
int res=0;
for(int i=l;i<=r;++i){
if(directions[i]=='R'||directions[i]=='L'){
res++;
}
}
return res;
}
};
3、6029. 射箭比赛中的最大得分 - 力扣(LeetCode) (leetcode-cn.com)
所以说人不能在一棵树上吊死,这题其实方法之前我都见过,按道理应当可以拿下,结果却因为第二题没转过弯来导致这题没好好思考。。。周赛时一直在debug第二题,觉得自己方法没错。。。唉,得吸取教训。
方法一:0/1背包问题+路径还原
这道题可以看成是0/1背包问题——一共有12件物品,每一件物品i的权重为aliceArrows[i]+1,有一个大小为numsArrows的背包,求背包所能容纳的物品的最大权重和。
这道题还多了一步:要求我们回溯出路径,找到拿的哪几件物品,也算是一个小小的难点。
class Solution {
public:
vector<int> maximumBobPoints(int numArrows, vector<int>& aliceArrows) {
vector<vector<int>> dp(12,vector<int>(numArrows+1,0));
for(int i=1;i<12;i++){ //正常的0/1背包求解,找到最大容量
for(int j=1;j<=numArrows;j++){
if(j>aliceArrows[i]){
dp[i][j]=max(dp[i-1][j],dp[i-1][j-aliceArrows[i]-1]+i);
}
else{
dp[i][j]=dp[i-1][j];
}
}
}
vector<int> ans(12,0);
for(int i=11;i>0;--i){ //路径还原
if(dp[i][numArrows]>dp[i-1][numArrows]){ //证明有过射箭行为
ans[i]=aliceArrows[i]+1;
numArrows-=ans[i];
}
}
ans[0]=numArrows; //统计完前面的所有有分的情况后,如果箭有剩余则证明全射在0区域,不得分
return ans;
}
};
方法二:二进制枚举
题目中射箭区域长度为12,可以使用一个二进制数来枚举出所有的情况,并不断更新最大分数以及对应的射箭情况。
class Solution {
public:
vector<int> maximumBobPoints(int numArrows, vector<int>& aliceArrows) {
int n=aliceArrows.size();
int curScore;
int maxScore=0;
int usedArrows;
vector<int> ans(12);
for(int i=0;i<(1<<n);i++){ //枚举出所有的2048种情况
curScore=0;
usedArrows=0;
vector<int> bob(12); //枚举所有情况
for(int j=0;j<n;j++){
if(((i>>j)&1)==1){ //若bob射在了aliceArrows[j]处
usedArrows+=aliceArrows[j]+1;
curScore+=j;
bob[j]=aliceArrows[j]+1;
}
}
if(usedArrows<=numArrows&&curScore>maxScore){ //箭有剩余且当前分数大于已记录的最大分数
ans=bob;
maxScore=curScore;
ans[0]+=numArrows-usedArrows;
}
}
return ans;
}
};
4、6030. 由单个字符重复的最长子字符串 - 力扣(LeetCode) (leetcode-cn.com)
给你一个下标从 0 开始的字符串 s 。另给你一个下标从 0 开始、长度为 k 的字符串 queryCharacters ,一个下标从 0 开始、长度也是 k 的整数 下标 数组 queryIndices ,这两个都用来描述 k 个查询。
第 i 个查询会将 s 中位于下标 queryIndices[i] 的字符更新为 queryCharacters[i] 。
返回一个长度为 k 的数组 lengths ,其中 lengths[i] 是在执行第 i 个查询 之后 s 中仅由 单个字符重复 组成的 最长子字符串 的 长度 。
本题由于使用到了线段树的有关思想,超出了笔者的知识范畴,所以不在此班门弄斧,在此附上大佬灵茶山艾府的题解,有兴趣的读者可以自行前去学习和字符集大小无关的线段树做法 - 由单个字符重复的最长子字符串 - 力扣(LeetCode) (leetcode-cn.com)
【Leetcode第285场周赛】——周赛总结的更多相关文章
- LeetCode第8场双周赛(Java)
这次我只做对一题. 原因是题目返回值类型有误,写的是 String[] ,实际上应该返回 List<String> . 好吧,只能自认倒霉.就当涨涨经验. 5068. 前后拼接 解题思路 ...
- LeetCode 第 15 场双周赛
1287.有序数组中出现次数超过25%的元素 1288.删除被覆盖区间 1286.字母组合迭代器 1289.下降路径最小和 II 下降和不能只保留原数组中最小的两个,hacked. 1287.有序数组 ...
- LeetCode 第 14 场双周赛
基础的 api 还是不够熟悉啊 5112. 十六进制魔术数字 class Solution { public: char *lltoa(long long num, char *str, int ra ...
- LeetCode第29场双周赛题解
第一题 用一个新数组newSalary保存去掉最低和最高工资的工资列表,然后遍历newSalary,计算总和,除以元素个数,就得到了平均值. class Solution { public: doub ...
- Java实现 LeetCode第30场双周赛 (题号5177,5445,5446,5447)
这套题不算难,但是因为是昨天晚上太晚了,好久没有大晚上写过代码了,有点不适应,今天上午一看还是挺简单的 5177. 转变日期格式 给你一个字符串 date ,它的格式为 Day Month Yea ...
- 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 就全部通过...感觉我的智商被狠 ...
随机推荐
- 用FineBI实现hive图表的可视化
图表的可视化,本来我以为很麻烦,因为看着图就感觉很难的样子,其实用FineBI来做很简单. 1.安装FineBI 2将下列jar包导入FineBI,webapps\webroot\WEB-INF\li ...
- vs code 提交代码弹框提示:请确保已在git中配置您的“user.name”和“user.email” ——解决方法
修改完项目代码,准备提交到git上,结果提交失败,弹框提示:请确保已在Git中配置您的"user.name"和"user.email" 打开终端,配置运行一下命 ...
- print语法
循环体 是 缩进的 :缩进是 Python 组织语句的方式.在交互式命令行里,得为每个缩输入制表符或空格.使用文本编辑器可以实现更复杂的输入方式:所有像样的文本编辑器都支持自动缩进.交互式输入复合语句 ...
- WPF materialDesign 锁屏后界面卡死问题解决
materialDesign的一个缓存机制问题,在xaml文件中Window属性添加一行: materialDesign:ShadowAssist.CacheMode="{x:Null}&q ...
- JAVA格式化数字
DecimalFormat df = new DecimalFormat("#.##"); System.out.println(df.format(100.1234)); // ...
- centos 等保漏洞修复
一.设置密码复杂度 [root@localhost ~]# vi /etc/pam.d/system-auth password requisite pam_pwquality.so try_firs ...
- YOLO v6:一个硬件友好的目标检测算法
本文来自公众号"AI大道理" YOLOv6 是美团视觉智能部研发的一款目标检测框架,致力于工业应用. YOLOv6支持模型训练.推理及多平台部署等全链条的工业应用需求,并在 ...
- Unity SRP Batcher的工作原理
https://blog.csdn.net/zakerhero/article/details/107714801
- 运行yarn报错:error C:\liuyan\tools\echarts-5.4.0\node_modules\cwebp-bin: Command failed.
完成warning和报错信息如下. 通过报错信息提示,锁定cwebp-bin,在waring中发现有提示说要更新至7或更高版本. 解决方案:在package.json中,将cwebp-bin设置版本为 ...
- 为什么vue3要使用ref
vue3中使用ref来创建响应式数据,让习惯了选项式API的我很不习惯.因为得使用xxx.value来读写响应式数据,没有vue2中直接使用this.xxx来读写简洁. vue3这样设计的原因是原生J ...