1

LeetCode刷题(53)~将每个元素替换为右侧最大元素【从后往前看】

 1 year ago
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.
neoserver,ios ssh client

给你一个数组 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;
    }

运行结果

LeetCode刷题(53)~将每个元素替换为右侧最大元素【从后往前看】_其他

提交代码(优化版)

 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;
    }

运行结果

LeetCode刷题(53)~将每个元素替换为右侧最大元素【从后往前看】_其他_02

官方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刷题(53)~将每个元素替换为右侧最大元素【从后往前看】_提交代码_03

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/replace-elements-with-greatest-element-on-right-side


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK