当前位置: 首页 > article >正文

【数据结构-邻项消除】力扣2211. 统计道路上的碰撞次数

在一条无限长的公路上有 n 辆汽车正在行驶。汽车按从左到右的顺序按从 0 到 n - 1 编号,每辆车都在一个 独特的 位置。

给你一个下标从 0 开始的字符串 directions ,长度为 n 。directions[i] 可以是 ‘L’、‘R’ 或 ‘S’ 分别表示第 i 辆车是向 左 、向 右 或者 停留 在当前位置。每辆车移动时 速度相同 。

碰撞次数可以按下述方式计算:

当两辆移动方向 相反 的车相撞时,碰撞次数加 2 。
当一辆移动的车和一辆静止的车相撞时,碰撞次数加 1 。
碰撞发生后,涉及的车辆将无法继续移动并停留在碰撞位置。除此之外,汽车不能改变它们的状态或移动方向。

返回在这条道路上发生的 碰撞总次数 。

示例 1:
输入:directions = “RLRSLL”
输出:5
解释:
将会在道路上发生的碰撞列出如下:

  • 车 0 和车 1 会互相碰撞。由于它们按相反方向移动,碰撞数量变为 0 + 2 = 2 。
  • 车 2 和车 3 会互相碰撞。由于 3 是静止的,碰撞数量变为 2 + 1 = 3 。
  • 车 3 和车 4 会互相碰撞。由于 3 是静止的,碰撞数量变为 3 + 1 = 4 。
  • 车 4 和车 5 会互相碰撞。在车 4 和车 3 碰撞之后,车 4 会待在碰撞位置,接着和车 5 碰撞。碰撞数量变为 4 + 1 = 5 。
    因此,将会在道路上发生的碰撞总次数是 5 。

示例 2:
输入:directions = “LLRR”
输出:0
解释:
不存在会发生碰撞的车辆。因此,将会在道路上发生的碰撞总次数是 0 。

在这里插入图片描述

贪心思想

class Solution {
public:
    int countCollisions(string s) {
        int l = 0, r = s.size() - 1;
        while(l <= r && s[l] == 'L') ++l;
        while(l <= r && s[r] == 'R') --r;
        int res = 0; 
        for(int i = l; i <= r; ++i) if(s[i] == 'L' || s[i] == 'R') ++res;
        return res;
    }
};

我们采用贪心的思想,实际上R和L相撞,也就是两个车停下,碰撞+2,R或L和S相撞,也就是一个车停下,碰撞+1。所以也就是,除了开头为L和结尾为R的不会影响结果的车,其他L和R的车的数量一定会碰撞并且停下,那么碰撞数量就是这些L和R的车的总和。我们在代码开头,用两个while将指针跳过不影响结果的元素,然后统计L和R的数量,最终结果就是碰撞数。


http://www.kler.cn/a/374144.html

相关文章:

  • 2.WebSocket进阶: 深入探究实时通信的最佳实践与优化技巧
  • UV紫外相机
  • Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用
  • vivado-vitis-2024.1 ps_hello_world 实验
  • 【技术点】用SQL语言操作关系型数据库Mysql中的数据(有练习资料)
  • C++ 模板专题 - 静态多态(CRTP)
  • UDP-鼠李糖合成酶基因的克隆与鉴定-文献精读76
  • 系统学习CFD,常见收敛问题、及如何与机器学习相结合
  • zynq PS端跑Linux响应中断
  • windows下安装python库wordCloud报错
  • 【PGCCC】Postgresql BgWriter 原理
  • Java实现数据去重的几种方案及其去重原理
  • 【skywalking】监控 Spring Cloud Gateway 数据
  • flask框架用法介绍(一)
  • 从零学习大模型(十)-----剪枝基本概念
  • 【SSE】前端vue3使用SSE,EventSource携带请求头
  • H2 Database IDEA 源码 DEBUG 环境搭建
  • VuePress文档初始化请求过多问题探讨
  • 设计模式07-结构型模式(装饰模式/外观模式/代理模式/Java)
  • HTB:Cicada[WriteUP]
  • 【Linux-进程间通信】匿名管道的应用-进程池实现+命名管道的应用ClientServer通信
  • 手机收银云进销存管理软件,商品档案Excel格式批量导入导出,一键导入Excel的商品档案
  • 跨可用区的集群k8s的基本操作和配置理解
  • 【开源免费】基于SpringBoot+Vue.JS网上订餐系统(JAVA毕业设计)
  • SQL 通用数据类型
  • 【数据库设计】规范设计理论之数据依赖的公理系统(1)