class Solution {
public:
vector<int> replaceElements(vector<int>& arr) {
}
};
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
原站题解
cpp 解法, 执行用时: 0 ms, 内存消耗: 71.2 MB, 提交时间: 2025-02-16 11:07:01
class Solution { public: vector<int> replaceElements(vector<int>& arr) { int mx = -1; for (int i = arr.size() - 1; i >= 0; i--) { int x = arr[i]; arr[i] = mx; mx = max(mx, x); // 维护后缀最大值 } return arr; } };
java 解法, 执行用时: 2 ms, 内存消耗: 45.8 MB, 提交时间: 2025-02-16 11:04:41
class Solution { public int[] replaceElements(int[] arr) { int mx = -1; for (int i = arr.length - 1; i >= 0; i--) { int x = arr[i]; arr[i] = mx; mx = Math.max(mx, x); // 维护后缀最大值 } return arr; } }
python3 解法, 执行用时: 61 ms, 内存消耗: 18.6 MB, 提交时间: 2025-02-16 11:04:26
class Solution: def replaceElements(self, arr: List[int]) -> List[int]: mx = -1 for i in range(len(arr) - 1, -1, -1): x = arr[i] arr[i] = mx mx = max(mx, x) # 维护后缀最大值 return arr
javascript 解法, 执行用时: 2 ms, 内存消耗: 58.7 MB, 提交时间: 2025-02-16 11:04:02
/** * @param {number[]} arr * @return {number[]} */ var replaceElements = function(arr) { let mx = -1; for (let i = arr.length - 1; i >= 0; i--) { let x = arr[i]; arr[i] = mx; mx = Math.max(mx, x); // 维护后缀最大值 } return arr; };
golang 解法, 执行用时: 0 ms, 内存消耗: 9 MB, 提交时间: 2025-02-16 11:03:33
func replaceElements(arr []int) []int { mx := -1 for i, x := range slices.Backward(arr) { arr[i] = mx mx = max(mx, x) // 维护后缀最大值 } return arr }
rust 解法, 执行用时: 0 ms, 内存消耗: 2.5 MB, 提交时间: 2025-02-16 11:01:01
impl Solution { pub fn replace_elements(mut arr: Vec<i32>) -> Vec<i32> { let mut mx = -1; for i in (0..arr.len()).rev() { let x = arr[i]; arr[i] = mx; mx = mx.max(x); // 维护后缀最大值 } arr } }
golang 解法, 执行用时: 184 ms, 内存消耗: 6.3 MB, 提交时间: 2021-06-07 18:13:22
func replaceElements(arr []int) []int { n := len(arr) ans := make([]int, n) for i := 0; i < n - 1; i++ { ans[i] = getMax(arr[i+1:]) } ans[n-1] = -1 return ans } func getMax(arr []int) int { if len(arr) == 0 { return 0 } if len(arr) == 1 { return arr[0] } ans := arr[0] for i := 1; i < len(arr); i++ { if arr[i] > ans { ans = arr[i] } } return ans }