首页 > 其他分享 >力扣740.删除并获得点数

力扣740.删除并获得点数

时间:2024-05-02 12:44:17浏览次数:18  
标签:740 nums int max 力扣 length 数组 点数

题目

给你一个整数数组 nums ,你可以对它进行一些操作。

每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1nums[i] + 1 的元素。

开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。

解题思路

​ 动态规划----打家劫舍加强版

1.找到原始数组nums中的最大数max

2.建立一个数组all用于记录0-max点数的个数,

例如

all=[0, 0, 2, 3, 1]; all[2]=2,代表点数为2的个数是2,all[4]=1代表点数为4的个数是1

3.将all数组看成是一个打家劫舍问题,选中的数的左右都不能被选,该问题的最优子结构公式

dp[i] = Math.max(dp[i - 1], dp[i - 2] + i * all[i]);

​ ①当前数的前一个数的最有情况

​ ②当前数前两个数的最优情况与当前数相加的总和

情况①②中选最优情况作为该子问题的最优解

代码

class Solution {
    public int deleteAndEarn(int[] nums) {
        if(nums==null && nums.length==0){
            return 0;
        }else if(nums.length==1){
            return nums[0];
        }

        int length=nums.length;
        //获取到nums数组中的最大值
        int max=nums[0];
        for(int i=1;i<length;i++){
            max=Math.max(max,nums[i]);
        }
        //利用最大值确定数组大小
        int[] all=new int[max+1];
        //all数组以点数为下标,存储的是点数对应的个数
        for(int i=0;i<length;i++){
            all[nums[i]]++;
        }
        int[] dp=new int[max+1];
        dp[1]=all[1];
        for(int i=2;i<=max;i++){
            dp[i]=Math.max(dp[i-1],dp[i-2]+all[i]*i);
        }
        return dp[max];
    }
}

标签:740,nums,int,max,力扣,length,数组,点数
From: https://www.cnblogs.com/always-uie/p/18170106

相关文章

  • 力扣746.使用最小花费爬楼梯
    题目给你一个整数数组cost,其中cost[i]是从楼梯第i个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为0或下标为1的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费解题思路​ 动态规划1.首先需要明确,先支付......
  • 力扣-430. 扁平化多级双向链表
    1.题目题目地址(430.扁平化多级双向链表-力扣(LeetCode))https://leetcode.cn/problems/flatten-a-multilevel-doubly-linked-list/题目描述你会得到一个双链表,其中包含的节点有一个下一个指针、一个前一个指针和一个额外的子指针。这个子指针可能指向一个单独的双向链表,也......
  • 力扣-82. 删除排序链表中的重复元素
    1.题目题目地址(82.删除排序链表中的重复元素II-力扣(LeetCode))https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii/题目描述给定一个已排序的链表的头 head, 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回已排序的链表 。 示例1:......
  • 力扣-83. 删除排序链表中的重复元素
    1.题目题目地址(83.删除排序链表中的重复元素-力扣(LeetCode))https://leetcode.cn/problems/remove-duplicates-from-sorted-list/题目描述给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回已排序的链表 。 示例1:输入:head=[1,1......
  • 力扣-203. 移除链表元素
    1.题目题目地址(203.移除链表元素-力扣(LeetCode))https://leetcode.cn/problems/remove-linked-list-elements/题目描述给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。 示例1:输入:head=[1,2,6,3,4,5,......
  • decimal.js 处理浮点数计算
    decimal.js处理浮点数计算:https://blog.csdn.net/Wustfish/article/details/132835178?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-132835178-blog-134384490.235^v43^pc_blog_bottom_relevance_base8&spm=1001.2101.300......
  • TODO-力扣-46. 全排列
    1.题目题目地址(46.全排列-力扣(LeetCode))https://leetcode.cn/problems/permutations/题目描述给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。 示例1:输入:nums=[1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,......
  • 力扣-852. 山脉数组的峰顶索引
    1.题目题目地址(852.山脉数组的峰顶索引-力扣(LeetCode))https://leetcode.cn/problems/peak-index-in-a-mountain-array/?envType=study-plan-v2&envId=primers-list题目描述符合下列属性的数组arr称为山脉数组:arr.length>=3存在i(0<i <arr.length-1)使得: ......
  • 力扣-258. 各位相加
    1.题目题目地址(258.各位相加-力扣(LeetCode))https://leetcode.cn/problems/add-digits/?envType=study-plan-v2&envId=primers-list题目描述给定一个非负整数num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。 示例1:输入:num=38输出:2解释:各位......
  • 力扣-2586. 统计范围内的元音字符串数
    1.题目题目地址(2586.统计范围内的元音字符串数-力扣(LeetCode))https://leetcode.cn/problems/count-the-number-of-vowel-strings-in-range/?envType=study-plan-v2&envId=primers-list题目描述给你一个下标从0开始的字符串数组words和两个整数:left和right。如果字......