本文主要是介绍2779.数组的最大美丽值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
解题思路
元素顺序对求最美值没有影响,可以先对数组进行排序。
假设选取的相同整数为 x x x,则数组元素能够改变到 x x x的元素值范围为: [ x − k , x + k ] [x-k, x+k] [x−k,x+k]。所以如果能够在排序后的数组中找到最值差小于等于 2 k 2k 2k的最长连续子数组,其长度即为最大美丽值。
C++
下面双重会超时的。
class Solution {
public:int maximumBeauty(vector<int>& nums, int k) {int n = nums.size();sort(nums.begin(), nums.end());int res = 0;int i = 0;while (i < n){for (int j = i; j < n; j++){if (nums[j] - nums[i] <= 2*k){res = max(res, j-i+1);}}i++;}return res;}
};
方法一:
然后利用滑动窗口的方法解决问题。
class Solution {
public:int maximumBeauty(vector<int>& nums, int k) {int n = nums.size();sort(nums.begin(), nums.end());int res = 0;for (int i = 0, j = 0; i < n; i++){while ((nums[i] - nums[j]) > 2*k){j++;}res = max(res, i - j + 1);}return res;}
};
Java
方法一:
class Solution {public int maximumBeauty(int[] nums, int k) {int n = nums.length;Arrays.sort(nums);int res = 0;for (int i = 0, j = 0; i < n; i++){while((nums[i] - nums[j] > 2*k)) j++;res = Math.max(res, i - j +1);}return res;}
}
Python
方法一:
class Solution:def maximumBeauty(self, nums: List[int], k: int) -> int:res, j, n = 0, 0, len(nums)nums.sort()for i in range(n):while nums[i] - 2*k > nums[j]:j += 1res = max(res, i - j + 1)return res
这篇关于2779.数组的最大美丽值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!