LeetCode 1846.减小和重新排列数组后的最大元素:排序(5行代码搞定)

发布时间:2026/6/29 18:38:53
LeetCode 1846.减小和重新排列数组后的最大元素:排序(5行代码搞定) 【LetMeFly】1846.减小和重新排列数组后的最大元素排序(5行代码搞定)力扣题目链接https://leetcode.cn/problems/maximum-element-after-decreasing-and-rearranging/给你一个正整数数组arr。请你对arr执行一些操作也可以不进行任何操作使得数组满足以下条件arr中第一个元素必须为1。任意相邻两个元素的差的绝对值小于等于1也就是说对于任意的1 i arr.length数组下标从 0 开始都满足abs(arr[i] - arr[i - 1]) 1。abs(x)为x的绝对值。你可以执行以下 2 种操作任意次减小arr中任意元素的值使其变为一个更小的正整数。重新排列arr中的元素你可以以任意顺序重新排列。请你返回执行以上操作后在满足前文所述的条件下arr中可能的最大值。示例 1输入arr [2,2,1,2,1]输出2解释我们可以重新排列 arr 得到[1,2,2,2,1] 该数组满足所有条件。arr 中最大元素为 2 。示例 2输入arr [100,1,1000]输出3解释一个可行的方案如下 1. 重新排列arr得到[1,100,1000] 。2. 将第二个元素减小为 2 。 3. 将第三个元素减小为 3 。 现在arr [1,2,3] 满足所有条件。arr 中最大元素为 3 。示例 3输入arr [1,2,3,4,5]输出5解释数组已经满足所有条件最大元素为 5 。提示1 arr.length 1051 arr[i] 109解题方法排序使用一个变量a n s ansans代表答案合法数组能达到的最大值a n s ansans初始值为0 00。将a r r arrarr数组从小到大排序遍历a r r arrarr数组如果当前元素大于a n s ansans则将当前元素和a n s ansans都变成a n s 1 ans1ans1。最后直接返回a n s ansans就好。时间复杂度O ( n log ⁡ n ) O(n\log n)O(nlogn)其中n l e n ( a r r ) nlen(arr)nlen(arr)空间复杂度O ( log ⁡ n ) O(\log n)O(logn)AC代码C/* * LastEditTime: 2026-06-28 20:00:21 */#ifdef_DEBUG#include_[1,2]toVector.h#endifclassSolution{public:intmaximumElementAfterDecrementingAndRearranging(vectorintarr){sort(arr.begin(),arr.end());intans0;for(intt:arr){anstans;}returnans;}};同步发文于CSDN和我的个人博客原创不易转载经作者同意后请附上原文链接哦~千篇源码题解已开源