1299. Replace Elements with Greatest Element on Right Side
Description
Given an array arr, replace every element in that array with the greatest element among the elements to its right, and replace the last element with -1.
After doing so, return the array.
Example 1:
Input: arr = [17,18,5,4,6,1] Output: [18,6,6,6,1,-1] Explanation: - index 0 --> the greatest element to the right of index 0 is index 1 (18). - index 1 --> the greatest element to the right of index 1 is index 4 (6). - index 2 --> the greatest element to the right of index 2 is index 4 (6). - index 3 --> the greatest element to the right of index 3 is index 4 (6). - index 4 --> the greatest element to the right of index 4 is index 5 (1). - index 5 --> there are no elements to the right of index 5, so we put -1.
Example 2:
Input: arr = [400] Output: [-1] Explanation: There are no elements to the right of index 0.
Constraints:
1 <= arr.length <= 1041 <= arr[i] <= 105
Solutions
Solution 1: Reverse Traversal
Thinking
Each index becomes the maximum to its right; the last is \(-1\). Scanning the suffix from the left repeats work. Walking right to left, we keep a suffix max \(mx\), write the old \(mx\) into the cell, then update \(mx\) with the original value. One reverse pass, \(O(1)\) extra space.
We use a variable \(mx\) to record the maximum value to the right of the current position, initially \(mx = -1\).
Then we traverse the array from right to left. For each position \(i\), we denote the current value as \(x\), update the current position's value to \(mx\), and then update \(mx = \max(mx, x)\).
Finally, return the original array.
The time complexity is \(O(n)\), where \(n\) is the length of the array. The space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |