1. 题目描述
arr 中 第一个 元素必须为 1 。
任意相邻两个元素的差的绝对值 小于等于 1 ,也就是说,对于任意的 1 <= i < arr.length (数组下标从 0 开始),都满足 abs(arr[i] - arr[i - 1]) <= 1 。abs(x) 为 x 的绝对值。
你可以执行以下 2 种操作任意次:
减小 arr 中任意元素的值,使其变为一个 更小的正整数 。
重新排列 arr 中的元素,你可以以任意顺序重新排列。
请你返回执行以上操作后,在满足前文所述的条件下,arr 中可能的 最大值 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-element-after-decreasing-and-rearranging
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 代码描述
2.1 题目内容
修改后的数组需要满足,首位为一,且相邻位的差值小于等于一。修改的方案为,可以修改任意数值,但是只能使其小于本身数值。
2.2 代码思路
a.对于数组进行复制,并排序。将首位设置为1
b.依次从低到高判断,不满足情况则为num[i] = num[i-1]+1,以此使得满足条件下,最大值最大情况。
3. 代码
3.1代码内容
class Solution {
public:
int maximumElementAfterDecrementingAndRearranging(vector<int>& arr) {
vector<int> copy(arr);
sort(arr.begin(), arr.end());
arr[0] = 1;
int n = arr.size();
for(int i=1;i<n;i++){
if(arr[i]-arr[i-1]>1)
arr[i] = arr[i-1]+1;
}
return arr[n-1];
}
};