基本思想:
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 : wutiande
class Solution:
def maximumElementAfterDecrementingAndRearranging(self, arr:list) -> int:
length = len(arr)
arr.sort()
if arr[0] !=1 and length==1:
return 1
elif arr[0] !=1:
for i in range(1,length):
if arr[i] == 1: # swap
arr[0],arr[i] = arr[i],arr[0]
break
if arr[0] != 1:
arr[0] = 1
for i in range(0,length-1):
if arr[i+1] - arr[i] > 1:
arr[i+1] = arr[i]+1
print(arr)
return max(arr)
if __name__ == '__main__':
s = Solution()
arr = [10,1,1000]
ans = s.maximumElementAfterDecrementingAndRearranging(arr)
print(ans)