给你一个数组 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
class Solution {
public:
vector<int> replaceElements(vector<int>& arr) {
int n=arr.size();
vector<int>ans(n);
ans[n-1]=-1;
for(int i=n-2;i>=0;i--){
ans[i]=max(arr[i+1],ans[i+1]);
}
return ans;
}
};
题目本身很简单,但逆序的方法感觉比较巧,也感觉会有很多应用场景。
1.新开一个记录数组,然后从后往前搞就行,因为新开数组的每个位置都是当前位置之后的原数组最大值,所以更新当前位置的时候,我们就用后一个的新开数组的值与后面那个数的值相比较就可以得到该位置的最大值。
ans[i] | ans[i+1] |
---|---|
max(arr[i+1],ans[i+1] ) | max(arr[i+2],ans[i+2]) |
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/replace-elements-with-greatest-element-on-right-side
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。