【算法】1299. 将每个元素替换为右侧最大元素(多语言实现)

61 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 14 天,点击查看活动详情


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 的元素右侧没有其他元素。

提示:

  • 1 <= arr.length <= 104
  • 1 <= arr[i] <= 105

原题传送门:

leetcode.cn/problems/re…


分析

  • 面对这道算法题目,二当家的陷入了沉思。
  • 一般遍历数组都是从左到右,如果不跳出这个惯性思维,就会想的复杂。
  • 然而一旦想到从右到左,逆向遍历,瞬间神清气爽,豁然开朗。

题解

rust

impl Solution {
    pub fn replace_elements(mut arr: Vec<i32>) -> Vec<i32> {
        let l = arr.len();
        let mut m = arr[l - 1];
        arr[l - 1] = -1;

        (0..l - 1).rev().for_each(|i| {
            let t = arr[i];
            arr[i] = m;
            m = m.max(t);
        });

        return arr;
    }
}

go

func replaceElements(arr []int) []int {
    max := arr[len(arr)-1]
    arr[len(arr)-1] = -1

    for i := len(arr) - 2; i >= 0; i-- {
        t := arr[i]
        arr[i] = max
        if t > max {
            max = t
        }
    }

    return arr
}

c++

class Solution {
public:
    vector<int> replaceElements(vector<int>& arr) {
        int m = arr[arr.size() - 1];
        arr[arr.size() - 1] = -1;

        for (int i = arr.size() - 2; i >= 0; --i) {
            int t = arr[i];
            arr[i] = m;
            m = max(m, t);
        }

        return arr;
    }
};

java

class Solution {
    public int[] replaceElements(int[] arr) {
        int max = arr[arr.length - 1];
        arr[arr.length - 1] = -1;

        for (int i = arr.length - 2; i >= 0; --i) {
            int t = arr[i];
            arr[i] = max;
            max = Math.max(max, t);
        }

        return arr;
    }
}

typescript

function replaceElements(arr: number[]): number[] {
    let m = arr[arr.length - 1];
    arr[arr.length - 1] = -1;

    for (let i = arr.length - 2; i >= 0; --i) {
        const t = arr[i];
        arr[i] = m;
        m = Math.max(m, t);
    }

    return arr;
};

python

class Solution:
    def replaceElements(self, arr: List[int]) -> List[int]:
        m = arr[len(arr) - 1]
        arr[len(arr) - 1] = -1
        for i in range(len(arr) - 2, -1, -1):
            t = arr[i]
            arr[i] = m
            m = max(m, t)
        return arr


非常感谢你阅读本文~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://juejin.cn/user/2771185768884824/posts 博客原创~


开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 14 天,点击查看活动详情