首页 > 其他分享 >6929.数组的最大美丽值-355

6929.数组的最大美丽值-355

时间:2023-07-16 20:46:49浏览次数:41  
标签:下标 nums int 元素 355 6929 数组 1e5

数组的最大美丽值

给你一个下标从 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 <= 10^5
0 <= nums[i], k <= 10^5

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-beauty-of-an-array-after-applying-operation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路1

见代码注释,比较绕,但是代码量并不是特别大。

code

class Solution {
public:
    
    //相等元素的子序列长度越长越好
    //nums中的相同元素越多越好
    //如何经过操作将数组中的相同元素尽可能多
    //每个数都可以是加减k内的任意值
    //每个位置都是一个区间
    //求重叠的最大数目
    //怎么求
    //记录每个区间中元素的数目
    //最后选取最多的那个即可
    //怎么记录区间的数目
    //k 1e5 不能一个个加
    //区间更新
    //记录数目的数组的差分
    // d0 = a0
    // d1 = a1 - a0
    // d2 = a2 - a1
    // d3 = a3 - a2
    // 给[1,2]加上1,只需要d1 + 1,d3 - 1
    // 需要处理边界问题,第一个元素最好为0
    // 初始化就是全零,然后不断区间更新
    static const int N = 300010;
    int cnt_d[N];
    void update(int l,int r)
    {
        cnt_d[l] +=1;
        cnt_d[r+1] -=1;
    }
    
    int maximumBeauty(vector<int>& nums, int k) {
        
        //cnt_d[0] = 0处理边界条件
        //1 -> -1e5 
        //2 -> -1e5 + 1
        //依次类推
        
        for(int i = 0;i < nums.size();i ++)
        {
            
            int l = nums[i] -k + 1e5 + 1;
            int r = nums[i] +k + 1e5 + 1;
            //cout<<l<<" "<<r<<endl;
            update(l,r);
        }
        
        //for(int i = 100000 -1;i <= 100009;i ++) cout<<cnt_d[i]<<endl;
        //统计数目
        for(int i = 1;i < N;i ++)
            cnt_d[i] = cnt_d[i] + cnt_d[i-1];
        
        
        int ans = 0;
        for(int i = 1;i < N;i ++) ans = max(ans,cnt_d[i]);
        
        return ans;
    }
};

解题思路2

code

标签:下标,nums,int,元素,355,6929,数组,1e5
From: https://www.cnblogs.com/huangxk23/p/17558488.html

相关文章

  • .net 实现数组拼接成sql语句IN
    一、简单记录一下.net实现字符串数组拼接成sql语句IN把0001|ceshi04|ceshi0F|ceshi0J变成‘0001’,‘ceshi04’,‘ceshi0F’格式List<string>joinCodeList=model.SJoinList.Split('|').ToList();stringcaseSql=joinCodeList.Aggregate("",(current,s)=>cu......
  • JavaScript:将对象数组映射到字典
    JavaScript:将对象数组映射到字典#javascript#打字稿#数据在JavaScript/TypeScript中将对象数组转换为字典的最简单方法:letdata=[{id:1,country:'Germany',population:83623528},{id:2,country:'Austria',population:8975552},{id:3,country......
  • Java性能优化-测试数组和链表在查询和添加删除时性能对比
    场景Java中使用JMH(JavaMicrobenchmarkHarness微基准测试框架)进行性能测试和优化:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131723751上面在使用JMH时测试了Java中数组和链表在进行头部插入时的对比结果。下面分别对比在头部、中部、尾部分别进行查询和......
  • Java数组指针
    Java数组指针在Java中,数组是一种非常常见和重要的数据结构。数组允许我们在一个变量中存储多个相同类型的元素。但是,在使用数组时,有时候我们可能需要引用数组的指针,以便更方便地操作数组的元素。本文将介绍Java中的数组指针的概念,并提供相关的代码示例。什么是数组指针?在Java中,......
  • Java数组
    0x01认识数组1、什么是数组数组就是用来存储一批同种类型数据的容器。int[]arr={20,10,80,60,90};String[]names={"张三","李四","王二"};2、为什么要用数组假如用变量学生名字,然后完成随机点名功能,怎么实现?存在有什么问题?Stringname1="张誉";Stringnam......
  • 2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一
    2023-07-15:给你一个非递减的正整数数组nums和整数K,判断该数组是否可以被分成一个或几个长度至少为K的不相交的递增子序列。输入:nums=[1,2,2,3,3,4,4],K=3。输出:true。答案2023-07-15:大体步骤如下:1.初始化计数变量cnt和最大计数变量maxCnt,初始值都为1。2.从索引......
  • 2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一
    2023-07-15:给你一个非递减的正整数数组nums和整数K,判断该数组是否可以被分成一个或几个长度至少为K的不相交的递增子序列。输入:nums=[1,2,2,3,3,4,4],K=3。输出:true。答案2023-07-15:大体步骤如下:1.初始化计数变量cnt和最大计数变量maxCnt,初始值都为1。2......
  • Java学习day04: 方法和数组
    我在B站上大学......
  • JS 数组操作
    JS数组操作如下://at(),用于接收一个整数值并返回该索引对应的元素,允许正数和负数。负整数从数组中的最后一个元素开始倒数constarr=[{name:'a',age:15},{name:'b',age:12},{name:'c',age:13},{name:'d',age:12},{name:'e',age:12}];console.log(ar......
  • C#中数组嵌套数组
    publicclassmo{publicintq1{get;set;}publicintcount{get;set;}}classClass1{staticvoidMain(string[]args){int[]a=newint[]{1,2,3,4,5};int[]b1=n......