算法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)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode刷题(53)~将每个元素替换为右侧最大元素从后往前看
1299. Replace Elements with Greatest Element on Right Side