移动机器人
力扣链接:2731. 移动机器人
题目描述
示例
官解思路
当两个机器人相撞时,它们会沿着原本相反的方向移动。由于机器人之间并没有任何区别,相撞可以看做是穿透,原本左边的机器人相撞后交换为右边的机器人,原本右边的机器人相撞后交换为左边的机器人,这样一来,两个机器人仿佛没有相撞过。因此,我们可以无视相撞,独立计算每个机器人 d 秒后所处的位置。
Java代码
class Solution {
static final int MOD = 1000000007;
public int sumDistance(int[] nums, String s, int d) {
int n = nums.length;
long[] pos = new long[n];
for(int i = 0; i < n; i++) {
if(s.charAt(i) == 'L') {
pos[i] = (long) nums[i] - d;
}else {
pos[i] = (long) nums[i] + d;
}
}
Arrays.sort(pos);
long res = 0;
for(int i = 1; i < n; i++) {
res += 1L * (pos[i] - pos[i - 1]) * i % MOD * (n - i) % MOD;
res %= MOD;
}
return (int) res;
}
}