GoCalf Calf 的自留地 · 昙花一现

1299. Replace Elements with Greatest Element on Right Side

Problem

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.

https://leetcode.cn/problems/replace-elements-with-greatest-element-on-right-side/

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 <= 10⁴
  • 1 <= arr[i] <= 10⁵

Test Cases

python
class Solution:
    def replaceElements(self, arr: List[int]) -> List[int]:
solution_test.py下载完整源码
py
import pytest

from solution import Solution


@pytest.mark.parametrize('arr, expected', [
    ([17,18,5,4,6,1], [18,6,6,6,1,-1]),
    ([400], [-1]),
])
@pytest.mark.parametrize('sol', [Solution()])
def test_solution(sol, arr, expected):
    assert sol.replaceElements(arr.copy()) == expected

Thoughts

可以直接 in-place 修改。从右向左扫描 arr,记录见到的最大的数字,并替换到扫描到的位置。

时间复杂度 O(n),空间复杂度 O(1)。

Code

py
class Solution:
    def replaceElements(self, arr: list[int]) -> list[int]:
        greatest = -1
        for i in range(len(arr) - 1, -1, -1):
            tmp = arr[i]
            arr[i] = greatest
            if tmp > greatest:
                greatest = tmp

        return arr

评论需要 JavaScript。