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场周赛】——周赛总结的更多相关文章

  1. LeetCode第8场双周赛(Java)

    这次我只做对一题. 原因是题目返回值类型有误,写的是 String[] ,实际上应该返回 List<String> . 好吧,只能自认倒霉.就当涨涨经验. 5068. 前后拼接 解题思路 ...

  2. LeetCode 第 15 场双周赛

    1287.有序数组中出现次数超过25%的元素 1288.删除被覆盖区间 1286.字母组合迭代器 1289.下降路径最小和 II 下降和不能只保留原数组中最小的两个,hacked. 1287.有序数组 ...

  3. LeetCode 第 14 场双周赛

    基础的 api 还是不够熟悉啊 5112. 十六进制魔术数字 class Solution { public: char *lltoa(long long num, char *str, int ra ...

  4. LeetCode第29场双周赛题解

    第一题 用一个新数组newSalary保存去掉最低和最高工资的工资列表,然后遍历newSalary,计算总和,除以元素个数,就得到了平均值. class Solution { public: doub ...

  5. Java实现 LeetCode第30场双周赛 (题号5177,5445,5446,5447)

    这套题不算难,但是因为是昨天晚上太晚了,好久没有大晚上写过代码了,有点不适应,今天上午一看还是挺简单的 5177. 转变日期格式   给你一个字符串 date ,它的格式为 Day Month Yea ...

  6. LeetCode 第 165 场周赛

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

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

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

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

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

  9. LeetCode第151场周赛(Java)

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

  10. LeetCode第152场周赛(Java)

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

随机推荐

  1. 【PS】PS如何删除图片中的白字

    [PS]PS如何删除图片中的白字 首先打开ps,然后导入要操作的图片,接着选择左边工具栏中的魔棒工具. 对所要操作的文字进行框选,可以按住shift键进行连续操作 点击上方工具栏中的选择 | 修改 | ...

  2. 问题记录_IDEA启动报错:Failed to create JVM. JVM Path

    问题记录_IDEA启动报错:Failed to create JVM. JVM Path 起因 下午写代码的时候感觉IDEA有点卡,不应该啊,我16G咋回卡呢,分配的内存也不小,于是又去加大内存分配, ...

  3. PyCharm的安装使用

    一.安装 1.进入官网点击下载 2.打开文件夹 3.点击next 4.选择安装路径 5.勾选创建桌面图标选项,点击next 6.点击安装 二.使用 1.import pycharm setting是指 ...

  4. ES6-Class类下

    前面super的源码: 查看代码 <script> // 1.作为函数调用 // 代表父类的构造方法,只能用在子类的构造方法中,用在其他地方就会报错 // super 虽然代表了父类的构造 ...

  5. vue项目打包后,自由修改配置如接口地址等

    背景描述: 项目打包后,如果想更换接口域名或者项目名称,就需要再次打包.但是这样子操作有点耗费时间.如果把这些配置写到一个文件中,然后在index.html文件中引入使用,这样子会大大提高工资效率,节 ...

  6. VMware VirtualCenter Servere服务不能启动

    故障现象现象:VMware VirtualCenter Servere服务不能启动 解决办法:进入%programdata%\VMware\VMwareVirtualCenter\Logs目录下面. ...

  7. ObjectARX2016-2创建直线

    众所周知,数据库里面包含各种数据表,而数据表里面又是各种记录,当然还有字段.AUTOCAD里面对于图形的管理也是基于图形数据库的.因此,想要在DWG里面添加一条直线,只需要做三件事: (1)打开数据表 ...

  8. 关于sql json数据的处理

    $resultProductPrice = DB::update("update lev_product_price set detail=json_set(detail,'$.颜色','红 ...

  9. TCC事务解决方案

    适用场景: 适用于具有强隔离性,严格一致性要求,也适用执行时间比较短的业务. 方案优缺点 优点: 1)在应用层实现具体逻辑,锁定资源的粒度小,不会锁定所有资源,性能比较高 2)Confirm阶段和Ca ...

  10. lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: meta line 4 and head, line 6, column 12 报错分析与解决方案

    报错分析: 我们检查代码没有任何问题,但报错显示:开始和结束标记不匹配. html:因为html是超文本标记语言,代码不规范也能解析. python:python是编程语言,代码不规范则解析不了. 解 ...