算法leetcode|1299. 将每个元素替换为右侧最大元素(rust和go)

Posted 二当家的白帽子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法leetcode|1299. 将每个元素替换为右侧最大元素(rust和go)相关的知识,希望对你有一定的参考价值。


文章目录


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

原题传送门:

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


分析

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

题解

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://le-yi.blog.csdn.net/ 博客原创~


以上是关于算法leetcode|1299. 将每个元素替换为右侧最大元素(rust和go)的主要内容,如果未能解决你的问题,请参考以下文章

1299. 将每个元素替换为右侧最大元素『简单』

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

LeetCode刷题(53)~将每个元素替换为右侧最大元素从后往前看

1299. Replace Elements with Greatest Element on Right Side

算法leetcode|1844. 将所有数字用字符替换(rust和go)

算法leetcode|1844. 将所有数字用字符替换(rust和go)