本文主要是介绍1846.减小和重新排列数组后的最大元素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
基本思想:
1.将数组排好序
2.处理特殊情况,只有一个元素并且值不为1,返回1
3.一般情况:1. 数组内有1,并且不在0号位置,将1的位置和0号位置的值交换2. 数组内没有1,将0号位置赋值为1经过上面的操作,我们得到了一个0号元素为1且递增的数组,接下来从0号位置到n-1的位置依次扫描,
如果后面的位置减去前面的位置的值大于1,那么后面的位置就要减小为(前面的值+1)。
扫描结束后返回数组最大值
代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/7/15 9:58
# @Author : wutiandeclass Solution:def maximumElementAfterDecrementingAndRearranging(self, arr:list) -> int:length = len(arr)arr.sort()if arr[0] !=1 and length==1:return 1elif arr[0] !=1:for i in range(1,length):if arr[i] == 1: # swaparr[0],arr[i] = arr[i],arr[0]breakif arr[0] != 1:arr[0] = 1for i in range(0,length-1):if arr[i+1] - arr[i] > 1:arr[i+1] = arr[i]+1print(arr)return max(arr)if __name__ == '__main__':s = Solution()arr = [10,1,1000]ans = s.maximumElementAfterDecrementingAndRearranging(arr)print(ans)
这篇关于1846.减小和重新排列数组后的最大元素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!