题目链接:2211. 统计道路上的碰撞次数(中等)
算法原理:
解法一:模拟
击败60.61%
时间复杂度O(N)
用prev记录左侧情况:往左:-1,撞停:0,往右:记录个数
其中一个R和L相撞时,只能是一个R撞击一个L,之后就是撞停的了,所以是ret+=prev+1
分别枚举当前位置是R、L或者S,与前一个位置相比较即可分析出来,很简单
解法二:计数
击败97.58%
时间复杂度O(N)
假设向外侧行驶,且中间未被反向或静止车辆阻断的车辆称为“外移车辆”
那么不是外移车辆的都会发生一次碰撞
Java代码:
class Solution {
public int countCollisions(String s) {
//往左:-1,撞停:0,往右:记录个数
int prev=-1;
int ret=0;
for(char c:s.toCharArray()){
if(c=='L'){
if(prev>=0){
//只有一个R和L相撞,之后就是撞停的了
ret+=prev+1;
prev=0;
}
}else if(c=='R'){
if(prev<=0) prev=1;
else prev++;
}else{
if(prev>0) ret+=prev;
prev=0;
}
}
return ret;
}
}
class Solution {
public int countCollisions(String s) {
int n=s.length();
int l=0,r=n-1;
while(l<n&&s.charAt(l)=='L') l++;
while(r>=l&&s.charAt(r)=='R') r--;
int ret=0;
for(int i=l;i<=r;i++)
if(s.charAt(i)!='S') ret++;
return ret;
}
}
2980

被折叠的 条评论
为什么被折叠?



