【力扣每日一题】2023.10.10 移动机器人

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

题目比较复杂,我概括一下。给我们一个数组表示不同机器人在一维坐标轴上的初始位置,还有一个字符串表示每个机器人的初始移动方向。当两个机器人相撞时(处于同一坐标)或者即将相撞时(坐标相邻),两个机器人的移动方向都立刻改变。

每秒机器人都移动一格,问最后机器人两两之间的距离之和一共是多少。

要解决这道题,我们要先解决两个问题,第一个就是机器人的移动问题,关于机器人的碰撞我们应该怎么处理。第二个就是机器人两两之间的距离怎么快速计算,直接套两层for循环去计算是会超时的。

第一个就是碰撞处理,直接模拟的话,效果是像下面这个动图的。

上面动图的意思是一开始机器人1右走,机器人2左走,相遇之后机器人1改为左走,机器人2改为右走,如果是像这样模拟的话,每秒我们都需要将每个机器人都移动一次再进一步判断是否改方向,这样也是会超时的。

关于碰撞处理,最好的处理方式是不做任何处理。

如上动图我们可以知道,不做任何处理,并且我们不再区分机器人,在移动之后得到的坐标和最初做了碰撞处理之后的结果是一样的。

所以面对第一个问题,我们直接不处理碰撞,直接把机器人的初始坐标加上对应方向的移动秒数即可。

第二个问题就是计算两两机器人之间的距离差。

我们先把机器人最终的坐标都摊在坐标轴上观察,机器人和别的机器人的距离我用不同颜色标出。

可以看的出来,机器人两两之间的距离有很多是重叠的,我们在把相邻机器人之间的重复距离段给提取出来。

我们可以找出规律,第i个机器人到第i+1个机器人之间的距离段一共重复了( i *( len - i )),i 从1开始。例如第一个机器人和第二个机器人之间的距离段一共重复了 1*(5-1)也就是4次。

两个问题都解决之后我们就知道应该怎么做了。首先先直接移动每个机器人,如果是右走,那么就直接在坐标加上秒数,如果是左走,那么坐标就减去秒数。

移动完毕就开始排序,因为我们上述的做法需要保证机器人在坐标上是有序的。

接着计算出机器人两两之间的距离就按照我们上面的式子,只需要遍历一次即可,由于数值较大,所以我们需要对答案进行取余。

代码:

class Solution {
public:int sumDistance(vector<int>& nums, string s, int d) {long long res=0;for(int i=0;i<nums.size();++i){if(s[i]=='R') nums[i]+=d;else nums[i]-=d;}sort(nums.begin(),nums.end());for(int i=1;i<nums.size();++i){res+=(static_cast<long long>(nums[i])-nums[i-1])*i*(nums.size()-i)%1000000007;}return res%1000000007;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/130165.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Netty(四)NIO-优化与源码

Netty优化与源码 1. 优化 1.1 扩展序列化算法 序列化&#xff0c;反序列化主要用于消息正文的转换。 序列化&#xff1a;将java对象转为要传输对象(byte[]或json&#xff0c;最终都是byte[]) 反序列化&#xff1a;将正文还原成java对象。 //java自带的序列化 // 反序列化 b…

黑马点评-07缓存击穿问题(热点key失效)及解决方案,互斥锁和设置逻辑过期时间

缓存击穿问题(热点key失效) 缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且重建缓存业务较复杂的key突然失效了,此时无数的请求访问会在瞬间打到数据库,带来巨大的冲击 一件秒杀中的商品的key突然失效了&#xff0c;由于大家都在疯狂抢购那么这个瞬间就会有无数的请求…

小谈设计模式(19)—备忘录模式

小谈设计模式&#xff08;19&#xff09;—备忘录模式 专栏介绍专栏地址专栏介绍 备忘录模式主要角色发起人&#xff08;Originator&#xff09;备忘录&#xff08;Memento&#xff09;管理者&#xff08;Caretaker&#xff09; 应用场景结构实现步骤Java程序实现首先&#xff…

TLR4-IN-C34-C2-COO,一种结合了TLR4抑制剂TLR4-IN-C34的连接器

TLR4-IN-C34-C2-COO是一种结合了TLR4抑制剂TLR4-IN-C34的连接器&#xff0c;在免疫调节中发挥重要作用&#xff0c;它通过抑制TLR4信号通路的传导&#xff0c;从而达到降低炎症反应的目的。TLR4是Toll样受体家族中的一员&#xff0c;它主要识别来自细菌和病毒的保守模式&#x…

vue2踩坑之项目:Swiper轮播图使用

首先安装swiper插件 npm i swiper5 安装出现错误&#xff1a;npm ERR npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: vue/eslint-config-standard6.1.0 npm ERR! Found: eslint-plugin-vue8.7.1 npm ERR! node_modules/esl…

基于Java+SpringBoot+Vue线上医院挂号系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

C# Windows 窗体控件中的边距和填充

可以将 Margin 属性、Left、Top、Right、Bottom 的每个方面设置为不同的值&#xff0c;也可以使用 All 属性将它们全部设置为相同的值。 在代码中设置Margin&#xff0c;元素的左边设置为5个单位、上边设置为10个单位、右边设置为15个单位和下边设置为20个单位。 TextBox myT…

HTTP长连接实现原理

1. HTTP长连接和短连接的定义 HTTP长连接 浏览器向服务器进行一次HTTP会话访问后&#xff0c;并不会直接关闭这个连接&#xff0c;而是会默认保持一段时间&#xff0c;那么下一次浏览器继续访问的时候就会再次利用到这个连接。在HTTP/1.1版本中&#xff0c;默认的连接都是长连…

vue-7-vuex

一、Vuex 概述 目标&#xff1a;明确Vuex是什么&#xff0c;应用场景以及优势 1.是什么 Vuex 是一个 Vue 的 状态管理工具&#xff0c;状态就是数据。 大白话&#xff1a;Vuex 是一个插件&#xff0c;可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。例如&#xff1a;购…

Jmeter 链接MySQL测试

1.环境部署 1.1官网下载MySQL Connector https://dev.mysql.com/downloads/connector/j/ 1.2 解压后&#xff0c;将jar放到jmeter/lib目录下 1.3 在测试计划中添加引用 2.脚本设置 2.1设置JDBC Connection Configuration 先添加一个setUp线程中&#xff0c;在setUp中添加“…

MongoDB 笔记

1 insert 、create、save区别 insert: 主键不存在则正常插入&#xff1b;主键已存在&#xff0c;抛出DuplicateKeyException 异常 save: 主键不存在则正常插入&#xff1b;主键已存在则更新 insertMany&#xff1a;批量插入&#xff0c;等同于批量执行 insert create&#x…

黑马点评-05缓存穿透问题及其解决方案,缓存空字符串或使用布隆过滤器

缓存穿透问题(缓存空) 缓存穿透的解决方案 缓存穿透(数据穿透缓存直击数据库): 缓存穿透是指客户端请求访问缓存中和数据库中都不存在的数据,此时缓存永远不会生效并且用户的请求都会打到数据库 数据库能够承载的并发不如Redis这么高&#xff0c;如果大量的请求同时访问这种…