[toc] leetcode 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
解题思路
法1
模拟:
我们从数组的最后一个元素开始遍历,将当前最大值存储在变量max中,并将其赋值给当前元素。
如果遍历到的元素大于max,则更新max的值。
最后返回替换完成后的数组。
- 时间复杂度(O(n))
- 空间复杂度(O(1))
执行结果
法1
func replaceElements(arr []int) []int {
length := len(arr)
max := -1
for i := length - 1; i >= 0; i-- {
temp := arr[i]
arr[i] = max
if temp > max {
max = temp
}
}
return arr
}
执行结果: 通过 显示详情 查看示例代码 添加备注
执行用时: 92 ms , 在所有 Go 提交中击败了 86.79% 的用户 内存消耗: 7.1 MB , 在所有 Go 提交中击败了 39.62% 的用户 通过测试用例: 90 / 90
本文由mdnice多平台发布