📜  门|门 IT 2005 |第 63 题(1)

📅  最后修改于: 2023-12-03 15:42:21.350000             🧑  作者: Mango

门|门 IT 2005 | 第 63 题

题目描述

有一个由数字组成的数组 nums,你需要将数组中的每个元素替换为其右侧比它大的元素。如果没有则用 -1 替换。

例如,给定 nums = [5,2,6,1],将其修改为 [6,6,-1,-1]。

输入格式

第一行输入一个整数 n,表示数组的长度。

第二行输入 n 个整数,表示数组 nums 中的元素。

输出格式

输出一个由元素替换后的 nums 组成的数组。

题解思路

我们可以从后向前遍历数组 nums,使用一个变量保存 maxVal 表示当前元素右侧比它大的最大元素值,然后将数组中的当前元素修改为当前元素右侧比它大的最大元素值 maxVal。

代码实现
def replaceElements(nums: List[int]) -> List[int]:
    n = len(nums)
    maxVal = -1
    for i in range(n - 1, -1, -1):
        cur = nums[i]
        nums[i] = maxVal
        maxVal = max(maxVal, cur)
    return nums
复杂度分析

时间复杂度:O(n),其中 n 为数组的长度。数组仅被遍历了一次。

空间复杂度:O(1)。为了存储 maxVal 所需的空间。