有一些机器人分布在一条无限长的数轴上,他们初始坐标用一个下标从 0 开始的整数数组 nums 表示。当你给机器人下达命令时,它们以每秒钟一单位的速度开始移动。 给你一个字符串 s ,每个字符按顺序分别表示每个机器人移动的方向。'L' 表示机器人往左或者数轴的负方向移动,'R' 表示机器人往右或者数轴的正方向移动。 当两个机器人相撞时,它们开始沿着原本相反的方向移动。 请你返回指令重复执行 d 秒后,所有机器人之间两两距离之和。由于答案可能很大,请你将答案对 109 + 7 取余后返回。 注意: 对于坐标在 i 和 j 的两个机器人,(i,j) 和 (j,i) 视为相同的坐标对。也就是说,机器人视为无差别的。 当机器人相撞时,它们 立即改变 它们的前进时间,这个过程不消耗任何时间。 当两个机器人在同一时刻占据相同的位置时,就会相撞。 例如,如果一个机器人位于位置 0 并往右移动,另一个机器人位于位置 2 并往左移动,下一秒,它们都将占据位置 1,并改变方向。再下一秒钟后,第一个机器人位于位置 0 并往左移动,而另一个机器人位于位置 2 并往右移动。 例如,如果一个机器人位于位置 0 并往右移动,另一个机器人位于位置 1 并往左移动,下一秒,第一个机器人位于位置 0 并往左行驶,而另一个机器人位于位置 1 并往右移动。d可能很大
时间: 2024-04-01 10:31:53 浏览: 15
这是一道有趣的模拟题目,我们可以考虑模拟每个机器人的移动过程。
具体来说,我们可以维护一个数组 pos 表示每个机器人的位置,一个数组 dir 表示每个机器人的移动方向,其中 dir[i] = 1 表示第 i 个机器人向右移动,dir[i] = -1 表示第 i 个机器人向左移动。
然后我们每次对每个机器人进行移动,如果发现有两个机器人的位置相同,那么它们就相撞,需要改变它们的移动方向。具体来说,如果第 i 个机器人和第 j 个机器人相撞,那么我们可以通过交换它们的移动方向来模拟它们的碰撞,即令 dir[i] = -dir[i],dir[j] = -dir[j]。
我们可以重复执行这个过程 d 次,最后统计每对机器人之间的距离,再求和并对 10^9 + 7 取模即可。
代码如下:
相关问题
给定整数数组nums和一个目标值target 在数组中找出和为目标值的两个整数 返回数组下标
题目描述:
给定一个整数数组 nums 和一个目标值 target,请在数组中找出和为目标值的两个整数,返回它们的数组下标。
示例:
输入:nums = [2, 7, 11, 15], target = 9
输出:[0, 1]
解释:nums[0] + nums[1] = 2 + 7 = 9,因此返回 [0, 1]。
思路:
暴力枚举法:对于每一个数,遍历整个数组,查找另一个数是否与它的和为目标值。
哈希表法:遍历数组,将每个数及其下标存储在哈希表中,同时查找哈希表中是否存在目标值减去当前数的差值。
代码实现:
暴力枚举法:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
for (int i = 0; i < nums.size(); i++) {
for (int j = i + 1; j < nums.size(); j++) {
if (nums[i] + nums[j] == target) {
res.push_back(i);
res.push_back(j);
return res;
}
}
}
return res;
}
};
哈希表法:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
unordered_map<int, int> map;
for (int i = 0; i < nums.size(); i++) {
if (map.find(target - nums[i]) != map.end()) {
res.push_back(map[target - nums[i]]);
res.push_back(i);
return res;
}
map[nums[i]] = i;
}
return res;
}
};
给你一个整数数组nums,请计算数组的中心下标
好的,计算数组的中心下标可以使用以下方法:
1. 先计算出数组的总和 sum,然后从左往右遍历数组,同时维护一个 left_sum 变量表示当前左边元素的总和。如果 left_sum 等于 sum 减去当前元素值和 left_sum 的差(即右边元素的总和),那么当前下标就是中心下标。
2. 如果左边元素总和与右边元素总和相等,那么当前下标就是中心下标。
下面是使用 Python 实现上述算法的代码:
``` python
def pivotIndex(nums):
sum = 0
for num in nums:
sum += num
left_sum = 0
for i in range(len(nums)):
if left_sum == sum - nums[i] - left_sum:
return i
left_sum += nums[i]
return -1
```
这个函数接受一个整数数组 nums 作为输入,并返回中心下标。如果不存在中心下标,则返回 -1。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)