列表

详情


1299. 将每个元素替换为右侧最大元素

给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换。

完成所有替换操作后,请你返回这个数组。

 

示例 1:

输入:arr = [17,18,5,4,6,1]
输出:[18,6,6,6,1,-1]
解释:
- 下标 0 的元素 --> 右侧最大元素是下标 1 的元素 (18)
- 下标 1 的元素 --> 右侧最大元素是下标 4 的元素 (6)
- 下标 2 的元素 --> 右侧最大元素是下标 4 的元素 (6)
- 下标 3 的元素 --> 右侧最大元素是下标 4 的元素 (6)
- 下标 4 的元素 --> 右侧最大元素是下标 5 的元素 (1)
- 下标 5 的元素 --> 右侧没有其他元素,替换为 -1

示例 2:

输入:arr = [400]
输出:[-1]
解释:下标 0 的元素右侧没有其他元素。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<int> replaceElements(vector<int>& arr) { } };

cpp 解法, 执行用时: 0 ms, 内存消耗: 71.2 MB, 提交时间: 2025-02-16 11:07:01

class Solution {
public:
    vector<int> replaceElements(vector<int>& arr) {
        int mx = -1;
        for (int i = arr.size() - 1; i >= 0; i--) {
            int x = arr[i];
            arr[i] = mx;
            mx = max(mx, x); // 维护后缀最大值
        }
        return arr;
    }
};

java 解法, 执行用时: 2 ms, 内存消耗: 45.8 MB, 提交时间: 2025-02-16 11:04:41

class Solution {
    public int[] replaceElements(int[] arr) {
        int mx = -1;
        for (int i = arr.length - 1; i >= 0; i--) {
            int x = arr[i];
            arr[i] = mx;
            mx = Math.max(mx, x); // 维护后缀最大值
        }
        return arr;
    }
}

python3 解法, 执行用时: 61 ms, 内存消耗: 18.6 MB, 提交时间: 2025-02-16 11:04:26

class Solution:
    def replaceElements(self, arr: List[int]) -> List[int]:
        mx = -1
        for i in range(len(arr) - 1, -1, -1):
            x = arr[i]
            arr[i] = mx
            mx = max(mx, x)  # 维护后缀最大值
        return arr

javascript 解法, 执行用时: 2 ms, 内存消耗: 58.7 MB, 提交时间: 2025-02-16 11:04:02

/**
 * @param {number[]} arr
 * @return {number[]}
 */
var replaceElements = function(arr) {
    let mx = -1;
    for (let i = arr.length - 1; i >= 0; i--) {
        let x = arr[i];
        arr[i] = mx;
        mx = Math.max(mx, x); // 维护后缀最大值
    }
    return arr;
};

golang 解法, 执行用时: 0 ms, 内存消耗: 9 MB, 提交时间: 2025-02-16 11:03:33

func replaceElements(arr []int) []int {
    mx := -1
    for i, x := range slices.Backward(arr) {
        arr[i] = mx
        mx = max(mx, x) // 维护后缀最大值
    }
    return arr
}

rust 解法, 执行用时: 0 ms, 内存消耗: 2.5 MB, 提交时间: 2025-02-16 11:01:01

impl Solution {
    pub fn replace_elements(mut arr: Vec<i32>) -> Vec<i32> {
        let mut mx = -1;
        for i in (0..arr.len()).rev() {
            let x = arr[i];
            arr[i] = mx;
            mx = mx.max(x); // 维护后缀最大值
        }
        arr
    }
}

golang 解法, 执行用时: 184 ms, 内存消耗: 6.3 MB, 提交时间: 2021-06-07 18:13:22

func replaceElements(arr []int) []int {
    n := len(arr)
    ans := make([]int, n)

    for i := 0; i < n - 1; i++ {
        ans[i] = getMax(arr[i+1:])
    }

    ans[n-1] = -1
    return ans
}

func getMax(arr []int) int {
    if len(arr) == 0 {
        return 0
    }
    if len(arr) == 1 {
        return arr[0]
    }
    ans := arr[0]
    for i := 1; i < len(arr); i++ {
        if arr[i] > ans {
            ans = arr[i]
        }
    }
    return ans
}

上一题