【LeetCode:2779. 数组的最大美丽值 + 排序 + 二分】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

在这里插入图片描述

🚩 题目链接

⛲ 题目描述

给你一个下标从 0 开始的整数数组 nums 和一个 非负 整数 k 。

在一步操作中,你可以执行下述指令:

在范围 [0, nums.length - 1] 中选择一个 此前没有选过 的下标 i 。
将 nums[i] 替换为范围 [nums[i] - k, nums[i] + k] 内的任一整数。
数组的 美丽值 定义为数组中由相等元素组成的最长子序列的长度。

对数组 nums 执行上述操作任意次后,返回数组可能取得的 最大 美丽值。

注意:你 只 能对每个下标执行 一次 此操作。

数组的 子序列 定义是:经由原数组删除一些元素(也可能不删除)得到的一个新数组,且在此过程中剩余元素的顺序不发生改变。

示例 1:

输入:nums = [4,6,1,2], k = 2
输出:3
解释:在这个示例中,我们执行下述操作:

  • 选择下标 1 ,将其替换为 4(从范围 [4,8] 中选出),此时 nums = [4,4,1,2] 。
  • 选择下标 3 ,将其替换为 4(从范围 [0,4] 中选出),此时 nums = [4,4,1,4] 。
    执行上述操作后,数组的美丽值是 3(子序列由下标 0 、1 、3 对应的元素组成)。
    可以证明 3 是我们可以得到的由相等元素组成的最长子序列长度。
    示例 2:

输入:nums = [1,1,1,1], k = 10
输出:4
解释:在这个示例中,我们无需执行任何操作。
数组 nums 的美丽值是 4(整个数组)。

提示:

1 <= nums.length <= 105
0 <= nums[i], k <= 105

🌟 求解思路&实现代码&运行结果


⚡ 排序 + 二分

🥦 求解思路
  1. 首先需要确定的是,该题目让我们选择的是最长子序列的长度,位置并不影响最终的结果,所以我们先对其进行一个排序。
  2. 然后我们遍历每一个元素nums[i],题目的定义是让我们将nums[i]替换为[nums[i]-k,nums[i]+k]区间范围内的元素,它就等价于找到最大最小值之差小于2k的元素。
  3. 这个过程可以通过滑动窗口求解,也可以通过二分查找来做,这个地方就通过二分来做,每次去找到第一个小于等于目标值(nums[i]+2*k)的元素的索引。
  4. 二分得到的索引 - 当前位置的索引,每次更新,取最大值,最后返回最大的值。
  5. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
class Solution {
    public int maximumBeauty(int[] nums, int k) {
        Arrays.sort(nums);
        int max = 0;
        for (int i = 0; i < nums.length; i++) {
            max = Math.max(binarySearch(nums, nums[i] + 2 * k + 1) - i, max);
        }
        return max;
    }

    public int binarySearch(int[] nums, int target) {
        int n = nums.length;
        int left = -1, right = n;
        while (left + 1 < right) {
            int mid = (left + right) / 2;
            if (nums[mid] < target) {
                left = mid;
            } else {
                right = mid;
            }
        }
        return right;
    }
}
🥦 运行结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

相关推荐

  1. LeetCode: 2779. 美丽

    2024-06-15 11:42:03       27 阅读
  2. LeetCode 2779. 美丽

    2024-06-15 11:42:03       36 阅读
  3. LeetCode 0410.分割

    2024-06-15 11:42:03       54 阅读
  4. LeetCode-410.分割

    2024-06-15 11:42:03       56 阅读
  5. LeetCode-153.寻找旋转排序

    2024-06-15 11:42:03       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-15 11:42:03       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-15 11:42:03       97 阅读
  3. 在Django里面运行非项目文件

    2024-06-15 11:42:03       78 阅读
  4. Python语言-面向对象

    2024-06-15 11:42:03       88 阅读

热门阅读

  1. Git教程II

    2024-06-15 11:42:03       36 阅读
  2. const与static区别

    2024-06-15 11:42:03       38 阅读
  3. 【C++】开源项目收集

    2024-06-15 11:42:03       30 阅读
  4. Synchronized和ReentranLock区别

    2024-06-15 11:42:03       26 阅读
  5. **自动驾驶技术介绍**

    2024-06-15 11:42:03       30 阅读
  6. 小实战:结合AI作图完成一个新闻发布管理

    2024-06-15 11:42:03       34 阅读
  7. Nginx网站服务

    2024-06-15 11:42:03       31 阅读
  8. Web前端三大主流框架详解及应用

    2024-06-15 11:42:03       32 阅读
  9. C语言中的弱函数是什么?

    2024-06-15 11:42:03       32 阅读
  10. ESP8266发送WOL幻数据包实现电脑远程唤醒

    2024-06-15 11:42:03       36 阅读
  11. Unity3D MMORPG多玩家状态同步详解

    2024-06-15 11:42:03       27 阅读