开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情
题目 leetcode.cn/
- 给你一个数组
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 的元素右侧没有其他元素。
提示
代码
function replaceElements(arr: number[]): number[] {
if(arr.length === 1) return [-1];
let result = [];
for(let i = 0; i < arr.length; i++){
let max = 0;
if(i < arr.length - 1){
for(let k = i + 1; k < arr.length; k++){
max = Math.max(max, arr[k]);
}
result.push(max);
} else {
max = -1;
result.push(max);
}
}
return result
};
- 双重遍历,找出最大值
- 边界处理:数组
arr长度的取值范围包括1,所以当数组长度等于1时,元素右边没有其他元素,只能返回[-1] - 当数组长度大于
1时,首先定义一个保存替换后结果的数组变量 - 然后双重遍历该数组,外层遍历确定当前需要替换的位置,内存遍历找出当前替换位置元素右边的所有元素的最大值
- 下一步将找出的最大值添加到结果变量中
- tips:如果当前元素是数组的最后一位元素时,此时不需要找右边的最大值,因为右边没有元素了,直接
push(-1)即可 - 最后返回替换后的数组结果
- 边界处理:数组
function replaceElements(arr: number[]): number[] {
if(arr.length === 1) return [-1];
let max = 0;
let result = [];
while(arr.length > 1){
arr.splice(0, 1);
max = Math.max(...arr);
result.push(max);
}
result.push(-1);
return result;
};
while循环 +Array.splice()- 边界处理和上面一样的,这里不再赘述
- 数组
splice方法传两个参数时,对数组做删除操作,改变原数组的长度,返回被删除元素。了解到这个的话,可以每次都将数组的第一位删除,再找出数组内剩余所有元素的最大值 while退出循环:当原数组被删除的只剩一个元素时退出,此时最后的元素就是数组的最后一个元素,后面push(-1)即可- 最后返回保存替换后的数组结果
结果
while性能好像不咋好,但是代码简洁一点- 双重遍历:
while循环: