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

103 阅读1分钟

[toc] leetcode 1299. 将每个元素替换为右侧最大元素.

题目描述

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

给你一个数组 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多平台发布