开启掘金成长之旅!这是我参与「掘金日新计划 · 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
原题传送门:
分析
- 面对这道算法题目,二当家的陷入了沉思。
- 一般遍历数组都是从左到右,如果不跳出这个惯性思维,就会想的复杂。
- 然而一旦想到从右到左,逆向遍历,瞬间神清气爽,豁然开朗。
题解
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 天,点击查看活动详情