力扣每日一题21.07.15减小和重新排列数组后的最大元素

1846.减小和重新排列数组后的最大元素
题目描述:

给你一个正整数数组arr。请你对arr执行一些操作(也可以不进行任何操作),使得数组满足一下条件

示:

1:arr中第一个元素必须为1。

2:任意相邻两个元素的差的绝对值小于等于1,也就是说,对于任意的1<=i<arr.length(数组下标从0开始),都满足abs(arr[i]-arr[i-1]) <= 1。abs(x)为x的绝对值。

你可以执行一下两种操作任意次:

1、减小arr中任意元素的值,使其变为一个更小的正整数。

2、重新排列arr中的元素,可以以任意顺序重新排列。

请你返回执行以上操作后,在满足前文所述条件下,arr中可能的最大值。

输入:arr = [2, 2, 1, 2, 1]

输出:2

解释:我们可以重新排列arr得到[1, 2, 2, 2, 1],该数组满足所有条件。arr中最大元素为2。

示例2:

输入:arr = [100, 1, 1000]

输出:3

解释:重新排列arr得到[1, 100, 1000],将第二个元素调整为2,将第三个元素调整为3。当前arr = [1, 2, 3],满足上述所有条件。arr中元素最大值为3。

示例3:

输入:arr = [1, 2, 3, 4, 5]

输出:5

解释:数组本身已经满足所有条件,最大元素为5。

思路:

按照题意,先排序,判断arr第一位是不是1,不是的话,根据题意设置为1;接下来遍历arr,判断当前元素与前一个元素的绝对差值是否大于1,如果是,则将当前元素设置为前一个元素的值+1.遍历后,返回arr的最后一个元素。

代码:

class Solution:
    def maximumElementAfterDecrementingAndRearranging(self, arr: List[int]) -> int:
        arr.sort()
        
        if arr[0] != 1:
            arr[0] = 1
        for i in range(1, len(arr)):
            if abs(arr[i] - arr[i-1]) > 1:
                arr[i] = arr[i-1] + 1
            
        return arr[-1]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值