题目描述
给你一个数组 arr
,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1
替换。
完成所有替换操作后,请你返回这个数组。
样例
输入:arr = [17,18,5,4,6,1]
输出:[18,6,6,6,1,-1]
限制
1 <= arr.length <= 10^4
1 <= arr[i] <= 10^5
算法
(模拟) $O(n)$
- 倒序遍历数组,遍历过程中,更新最大值,并修改数组元素即可。
时间复杂度
- 遍历数组一次,故时间复杂度为 $O(n)$。
空间复杂度
- 仅需要常数的额外空间。
C++ 代码
class Solution {
public:
vector<int> replaceElements(vector<int>& arr) {
int n = arr.size(), m = -1;
for (int i = n - 1; i >= 0; i--) {
int t = arr[i];
arr[i] = m;
m = max(m, t);
}
return arr;
}
};