g2701_2800.s2731_movement_of_robots.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g2701_2800.s2731_movement_of_robots;
// #Medium #Array #Sorting #Prefix_Sum #Brainteaser
// #2023_09_22_Time_9_ms_(100.00%)_Space_54.7_MB_(63.56%)
import java.util.Arrays;
/**
* 2731 - Movement of Robots\.
*
* Medium
*
* Some robots are standing on an infinite number line with their initial coordinates given by a **0-indexed** integer array `nums` and will start moving once given the command to move. The robots will move a unit distance each second.
*
* You are given a string `s` denoting the direction in which robots will move on command. `'L'` means the robot will move towards the left side or negative side of the number line, whereas `'R'` means the robot will move towards the right side or positive side of the number line.
*
* If two robots collide, they will start moving in opposite directions.
*
* Return _the sum of distances between all the pairs of robots_ `d` _seconds after the command._ Since the sum can be very large, return it modulo 109 + 7
.
*
* **Note:**
*
* * For two robots at the index `i` and `j`, pair `(i,j)` and pair `(j,i)` are considered the same pair.
* * When robots collide, they **instantly change** their directions without wasting any time.
* * Collision happens when two robots share the same place in a moment.
* * For example, if a robot is positioned in 0 going to the right and another is positioned in 2 going to the left, the next second they'll be both in 1 and they will change direction and the next second the first one will be in 0, heading left, and another will be in 2, heading right.
* * For example, if a robot is positioned in 0 going to the right and another is positioned in 1 going to the left, the next second the first one will be in 0, heading left, and another will be in 1, heading right.
*
* **Example 1:**
*
* **Input:** nums = [-2,0,2], s = "RLL", d = 3
*
* **Output:** 8
*
* **Explanation:**
*
* After 1 second, the positions are [-1,-1,1]. Now, the robot at index 0 will move left, and the robot at index 1 will move right.
*
* After 2 seconds, the positions are [-2,0,0]. Now, the robot at index 1 will move left, and the robot at index 2 will move right.
*
* After 3 seconds, the positions are [-3,-1,1].
*
* The distance between the robot at index 0 and 1 is abs(-3 - (-1)) = 2.
*
* The distance between the robot at index 0 and 2 is abs(-3 - 1) = 4.
*
* The distance between the robot at index 1 and 2 is abs(-1 - 1) = 2.
*
* The sum of the pairs of all distances = 2 + 4 + 2 = 8.
*
* **Example 2:**
*
* **Input:** nums = [1,0], s = "RL", d = 2
*
* **Output:** 5
*
* **Explanation:**
*
* After 1 second, the positions are [2,-1].
*
* After 2 seconds, the positions are [3,-2].
*
* The distance between the two robots is abs(-2 - 3) = 5.
*
* **Constraints:**
*
* * 2 <= nums.length <= 105
* * -2 * 109 <= nums[i] <= 2 * 109
* * 0 <= d <= 109
* * `nums.length == s.length`
* * `s` consists of 'L' and 'R' only
* * `nums[i]` will be unique.
**/
public class Solution {
public int sumDistance(int[] nums, String s, int d) {
int n = nums.length;
int mod = (int) (1e9 + 7);
for (int i = 0; i < n; i++) {
nums[i] += (s.charAt(i) == 'R') ? d : -d;
}
Arrays.sort(nums);
long res = 0;
for (int i = 0; i < n; i++) {
res = (res + (1L + i + i - n) * nums[i]) % mod;
}
return (int) ((res + mod) % mod);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy