Loading... > https://leetcode.cn/problems/maximum-beauty-of-an-array-after-applying-operation/description/?envType=daily-question&envId=2024-05-02 根据题目描述,任意一个元素 $x$ 可以变成的范围是 $[x - k, x + k]$ ,所以只要一个子序列中最大值和最小值之差小于 $2k$ ,该序列中所有元素都可以变成相同的数。 数组的美丽值和元素的顺序无关,所以可以先对数组进行排序,然后利用滑动窗口的思想,找到长度最大的符合条件的区间即可。 ```c++ class Solution { public: int maximumBeauty(std::vector<int>& nums, int k) { const int n = nums.size(), interval = 2 * k; std::sort(nums.begin(), nums.end()); int res = 1, left = 0, right = 1; while (right < n) { while (right < n && nums[right] - nums[left] <= interval) right++; res = std::max(res, right - left); left++; } return res; } }; ``` - 时间复杂度:$O(nlogn)$ ,其中 $n$ 为 `nums` 数组的长度,主要时间消耗为排序。 - 空间复杂度:$O(logn)$ ,排序需要 $O(logn)$ 的栈空间。 最后修改:2024 年 06 月 15 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏