问题描述
解题思路
由于题目允许我们重新排列数组中的元素任意次,因此首先将数组排序,根据arr
中第一个元素必须为1
,以及相邻两元素的差的绝对值小于等于1
,可得arr[i] = min(i + 1, arr[i - 1] + 1)
(因为我们要找arr
可能的最大值),又因为不允许增大arr
中的元素,所以arr[i] = min(arr[i], i + 1, arr[i - 1] + 1)
。
代码
class Solution {
public:
int maximumElementAfterDecrementingAndRearranging(vector<int>& arr) {
sort(arr.begin(), arr.end());
arr[0] = 1;
for (int i = 1; i < arr.size(); i++) {
arr[i] = min(arr[i - 1] + 1, min(arr[i], i + 1));
}
return arr[arr.size() - 1];
}
};
标签:arr,after,数组,min,元素,maximum,1846,重新排列
From: https://www.cnblogs.com/zwyyy456/p/17082926.html