2087. Minimum Cost Homecoming of a Robot in a Grid
Description
There is an m x n grid, where (0, 0) is the top-left cell and (m - 1, n - 1) is the bottom-right cell. You are given an integer array startPos where startPos = [startrow, startcol] indicates that initially, a robot is at the cell (startrow, startcol). You are also given an integer array homePos where homePos = [homerow, homecol] indicates that its home is at the cell (homerow, homecol).
The robot needs to go to its home. It can move one cell in four directions: left, right, up, or down, and it can not move outside the boundary. Every move incurs some cost. You are further given two 0-indexed integer arrays: rowCosts of length m and colCosts of length n.
- If the robot moves up or down into a cell whose row is
r, then this move costsrowCosts[r]. - If the robot moves left or right into a cell whose column is
c, then this move costscolCosts[c].
Return the minimum total cost for this robot to return home.
Β
Example 1:
Input: startPos = [1, 0], homePos = [2, 3], rowCosts = [5, 4, 3], colCosts = [8, 2, 6, 7] Output: 18 Explanation: One optimal path is that: Starting from (1, 0) -> It goes down to (2, 0). This move costs rowCosts[2] = 3. -> It goes right to (2, 1). This move costs colCosts[1] = 2. -> It goes right to (2, 2). This move costs colCosts[2] = 6. -> It goes right to (2, 3). This move costs colCosts[3] = 7. The total cost is 3 + 2 + 6 + 7 = 18
Example 2:
Input: startPos = [0, 0], homePos = [0, 0], rowCosts = [5], colCosts = [26] Output: 0 Explanation: The robot is already at its home. Since no moves occur, the total cost is 0.
Β
Constraints:
m == rowCosts.lengthn == colCosts.length1 <= m, n <= 1050 <= rowCosts[r], colCosts[c] <= 104startPos.length == 2homePos.length == 20 <= startrow, homerow < m0 <= startcol, homecol < n
Solutions
Solution 1: Greedy
Let's assume the robot's initial position is \((x_0, y_0)\) and the home position is \((x_1, y_1)\).
If \(x_0 < x_1\), the robot needs to move down, passing through rows \([x_0 + 1, x_1]\), with a total cost of \(\sum_{i = x_0 + 1}^{x_1} rowCosts[i]\). If \(x_0 > x_1\), the robot needs to move up, passing through rows \([x_1, x_0 - 1]\), with a total cost of \(\sum_{i = x_1}^{x_0 - 1} rowCosts[i]\). If \(x_0 = x_1\), the robot doesn't need to move vertically, and the total cost is \(0\).
Similarly, if \(y_0 < y_1\), the robot needs to move right, passing through columns \([y_0 + 1, y_1]\), with a total cost of \(\sum_{j = y_0 + 1}^{y_1} colCosts[j]\). If \(y_0 > y_1\), the robot needs to move left, passing through columns \([y_1, y_0 - 1]\), with a total cost of \(\sum_{j = y_1}^{y_0 - 1} colCosts[j]\). If \(y_0 = y_1\), the robot doesn't need to move horizontally, and the total cost is \(0\).
The answer is the sum of the vertical movement cost and the horizontal movement cost.
The time complexity is \(O(m + n)\), where \(m\) and \(n\) are the lengths of \(rowCosts\) and \(colCosts\), respectively. The space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | |
