替换元素_LeetCode基础算法题第179篇:将每个元素替换为右侧最大元素

技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。

如果有任何问题可以在文章后评论或者私信给我。

如果有朋友希望我讲些其他话题,请在评论区留言或者私信给我。

持续分享,敬请关注。


0fbd90f7db524b5303c9ae55f50dd30a.png

LeetCode 1299. 将每个元素替换为右侧最大元素(Replace Elements with Greatest Element on Right Side)

问题描述:

给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换。

完成所有替换操作后,请你返回这个数组。

注:

  • 1 <= arr.length <= 10^4;
  • 1 <= arr[i] <= 10^5;

示例:

35013e688777cc4b848934f06c90e668.png

C语言实现:

先要说明的是,从C语言给定的函数注释来看,返回数组是一个新数组,即不能修改原数组arr,那么后面java和python的实现,我们都会返回一个新数组。

按照题目的描述,显然从右到左替换最为方便。

我们先定义返回数组res,它的长度和arr是一样的,然后定义变量m用于保存右侧最大值,它的初始值为arr的最后一个元素。

首先,无论如何res最右边的元素都会是-1,然后倒数第二个元素是arr的最后两个元素最大的那个,所以我们的做法是直接从arr倒数第二个元素开始向左遍历。

对于遍历中的每一个元素arr[i],先后做如下操作:

  1. 首先对于res[i],用当前得到的最大值m赋值;
  2. 然后重新计算最大值m, m = max(arr[i], m);

如此进行下去,一直到遍历结束。

db432048a5e141c4344317911e8c0b99.png

整个过程很简单,代码如下:

856efcfb0a794df1f54f20a2c50aabbe.png
9b8696376b6a9bb378dcb75698e2311b.png

Java语言实现:

Java 的实现和C语言的实现一致,不再撰述。

代码如下:

16a4a256524605182dab499926dd3eff.png
e9c0ba7873a6cb2a38263a3085ee374f.png

Python语言实现:

Python 的实现和C语言的实现一致,不再撰述。

代码如下:

fa94d4780efdfc20041228fe963026d2.png
a3363f2f0fcf4990929fee6cd439efbd.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值