首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >18 Replace Elements with Greatest Element on Right Side

18 Replace Elements with Greatest Element on Right Side

作者头像
devi
发布2021-08-18 16:00:54
发布2021-08-18 16:00:54
3120
举报
文章被收录于专栏:搬砖记录搬砖记录

题目

Given an array arr, replace every element in that array with the greatest element among the elements to its right, and replace the last element with -1.

After doing so, return the array.

Example 1:

Input: arr = [17,18,5,4,6,1] Output: [18,6,6,6,1,-1]

Constraints:

代码语言:javascript
复制
1 <= arr.length <= 10^4
1 <= arr[i] <= 10^5

分析

题意: 遍历数组,将当前数字替换成右侧最大的一个数字 最后将末尾的一个数字替换为-1

代码语言:javascript
复制
i=0 17 18 5 4 6 1 ⇒ 18 18 5 4 6 1
i=1 18 18 5 4 6 1 ⇒ 18 6  5 4 6 1
i=2 18 6  5 4 6 1 ⇒ 18 6  6 4 6 1 
i=3 18 6  6 4 6 1 ⇒ 18 6  6 6 6 1 
i=4 18 6  6 6 6 1 ⇒ 18 6  6 6 6 1 
i=5 18 6  6 6 6 1 ⇒ 18 6  6 6 6 -1 

难点: 拿到每个数字时,还得找出其后的最大数,遍历自然能够解决,但是复杂度太高。 下面使用一种嵌套for循环拆成同级的两个for循环的方式

解答

代码语言:javascript
复制
class Solution {
    public int[] replaceElements(int[] arr) {
        
		//创建一个数组专门存放arr[i]之后的最大值
        int[] maxTillNowArr = new int[arr.length];
        
        //初始化最大值
		int curMax = -1;
		
		//从后往前查找,找出arr[i]右边的最大值;这个容易写成从前往后查找,自己想想为什么
        for(int i = arr.length-1; i >= 0; i--)
        {
            curMax = Math.max(curMax, arr[i]);
            maxTillNowArr[i] = curMax;
        }
        
		//将arr[i]替换成右边的最大值
        for(int i = 0; i < arr.length-1; i++)
        {
            arr[i] = maxTillNowArr[i+1];
        }
       
	   // 最后置为 -1
        arr[arr.length-1] = -1;
        
        return arr;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/02/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 分析
  • 解答
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档