LeetCode题解:数组的最大美丽值

简介: LeetCode题解:数组的最大美丽值

好久没打力扣周赛了,今天做了下,以前都是可以肝三个题的,今天第二题就卡住了😭😭😭

下面我就浅浅分析下这个题吧,我一定能给你讲明白的😀😀😀

我们先来康康题目的意思啦,为了方便观看,我直接到力扣那里截了个屏过来✅

划重点

这道题免费哟,直接上链接🥰🥰🥰数组的最大美丽值

题目都看完了吧?

我们现在来聊聊这道题的思路

思路

这道题如果采用常规的暴力法去做的话,是肯定的会TLE(超时)的,别问怎么知道的,因为尝试过了😤😤😤,其实看看这数据范围也知道,暴力法会超时~

那我们可以怎么优化呢,且听我徐徐道来

重点:我们对数组从小到大排序一下(这个其实并不会影响我们找题目中说的美丽值,因为需要找的是相同元素的子序列的长度嘛,所以即使排序了肯定也没影响啦)

😀好滴,排序完了后,我们开始浅浅分析一波

因为数组中任何的一个数x,可以是x-k 到 x+k 区间中的数,我们的目标是在数组中能够通过改变元素的值从而获得更多相等的数

因为在[x-k,x+k]区间的数都可以变成x,那么,我们可以得出一个结论,若数组中任何一个元素和最小的那个元素的差值都<=2*k的话,那么这个数组中的每个元素都能改变成x

相信你一定看懂了吧,没看懂可以在回味一下

好了,我们接下来就开始coding

时间复杂度:nlogn

class Solution {
public:
    int maximumBeauty(vector<int>& nums, int k) {
        //获取长度
        int len = nums.size();
        //排序,方便处理
        sort(nums.begin(),nums.end());
        // r是右指针,ans记录最终的答案
        int r=0,ans=0;
        for(int i=0;i<len;i++){
            //这里 nums[r]-nums[i] <= 2*k 就是题解中说的,数组中任何一个元素和最小的那个元素的差值都<=2*k
            //nums[i] 一定是[i,r]区间中最小的,因为排序了的,所以这就是为什么要排序的原因
            while(r<len&&nums[r]-nums[i]<=2*k){
                r++;
            }
            // r-i 就表示数组中 [r,i]这个区间的数都能变成相等的,我们这里是需要求长度,所以直接r-i
            // 在所有区间中,取最大的那个长度
            ans=max(ans,r-i);
        }
        return ans;
    }
};

OKOK,题解完毕,这道题算是比较经典了,结合注释相信大家都看懂了吧,看懂了的掌声响起来😋,若还有不懂的地方,也是可以录制视频来讲解的额(掌声响起来😍)


相关文章
|
4天前
|
算法
【数组相关面试题】LeetCode试题
【数组相关面试题】LeetCode试题
|
4天前
|
存储
力扣面试经典题之数组/字符串
力扣面试经典题之数组/字符串
27 0
|
4天前
|
人工智能 BI
力扣561 数组拆分
力扣561 数组拆分
|
4天前
【Leetcode】两数之和,给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
【Leetcode】两数之和,给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
|
4天前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
13 2
|
4天前
|
索引
leetcode代码记录(最长重复子数组
leetcode代码记录(最长重复子数组
12 0
|
4天前
leetcode代码记录(两个数组的交集
leetcode代码记录(两个数组的交集
9 1
|
4天前
leetcode代码记录(最大子数组和
leetcode代码记录(最大子数组和
11 2
|
4天前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
22 0
|
4天前
|
索引
Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引