
2

LeetCode刷题(53)~将每个元素替换为右侧最大元素【从后往前看】
source link: https://blog.51cto.com/u_15939722/6004146
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

给你一个数组 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
解答 By 海轰
vector<int> replaceElements(vector<int>& arr) {
int len=arr.size();
int maxnum=arr[len-1];// 前面的最大值
for(int i=len-1;i>=0;--i)
{
if(i==len-1)
{
arr[i]=-1;
}
else
{
int temp=arr[i];
arr[i]=maxnum;
maxnum=max(maxnum,temp);
}
}
return arr;
}
运行结果

提交代码(优化版)
vector<int> replaceElements(vector<int>& arr) {
int len=arr.size();
int maxnum=arr[len-1];// 前面的最大值
arr[len-1]=-1;
for(int i=len-2;i>=0;--i)
{
int temp=arr[i];
arr[i]=maxnum;
maxnum=max(maxnum,temp);
}
return arr;
}
运行结果

官方Demo
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(ans[i + 1], arr[i + 1]);
}
return ans;
}
运行结果

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/replace-elements-with-greatest-element-on-right-side
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK