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

740. 删除并获得点数

时间:2024-03-23 17:44:06浏览次数:21  
标签:740 删除 nums max second ls 点数 total first

给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。

主要思路:其实这道题是打家劫舍的变种,使用动态规划求解
详细思路:这道题的关键在于选择了一个数那么数组中其他相同的数也相当于被选择了,题目中说x-1和x+1不能选择,就相当于打家劫舍中的相邻人家不能抢。

  1. 创立一个total数组,长度为max(nums)+1,将nums[i]存储的total[nums[i]]中,那么最后total里面存储的就是选择这个数可以获得的点数。
  2. 利用打家劫舍的方法进行求解,状态转移方程为 dp[i] = max(dp[i-2]+nums[i], dp[i-1])或者使用双变量节省空间**first, second = second, max(second, first + total[i]) 最后return second
class Solution:
    def deleteAndEarn(self, nums: List[int]) -> int:
        max_num = max(nums)
        total = [0] * (max_num+1)
        for val in nums:
            total[val] += val
        
        def rob(ls:List[int])->int:
            first = ls[0]
            second = ls[1]
            for i in range(2, len(ls)):
                first, second = second, max(second, first+ls[i])
            return second
        return rob(total)

做了好几道动态规划的题目了,还是他妈的不会

标签:740,删除,nums,max,second,ls,点数,total,first
From: https://www.cnblogs.com/zhumeili/p/18091392

相关文章

  • 代码随想录算法训练营第五十五天| ● 583. 两个字符串的删除操作 ● 72. 编辑距离
    两个字符串的删除操作 题目链接:583.两个字符串的删除操作-力扣(LeetCode)思路:第一次尝试用画图法,然后肉眼观察dp递归规律……但是dp[i][j]的含义还是参考昨天的思路,表示到此处需要删除多少个字符。classSolution{public:intminDistance(stringword1,stringword2......
  • 【C语言】整数和浮点数在内存中的存储
    点这里是个人主页~这次的内容是比较底层的奥,对于理解编程很重要~整数浮点数在内存中的存储一、整数在内存中的存储二、大小端字节序和字节序判断大小端的概念一道简单关于大小端排序的百度面试题三、简单理解数据类型存储范围例一例二例三例四例五例六四、浮点......
  • 整数和浮点数在内存中存储
    1,整数在内存中存储首先先了解原码,补码,反码三者第一位均为符号位。我们用 0 表示正 ,1表示负原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。补码:将原码的符号位不变,其他位依次按位取反就可以得到反码。反码:反码+1就得到补码。如整数5原码:00000000000......
  • 在for循环中删除迭代器所指内容崩溃
    经常在网上看到“容器中删除的只要不是最后一个元素,循环就会崩溃”其实不然,经过测试;容器中使用迭代器循环访问,只要删除迭代器所指元素后,继续for,不管你删除的是第一个还是最后一个,或者中间的某一个,只要不跳出来,就会崩溃;首先,for循环,++或者--,都是在for循环体执行完一次后执行;所以当......
  • 深入了解C语言中浮点数的存储方式
    因为这期可能对你们来说太简单了,所以我用一个字来概括吧好了,结束了,我们下期再见喽,不会有人真的走了吧,好了,砸门多的不说少的不闹好吧,直接上主食。1.浮点数和整数在内存中存储的区别浮点数和整数在内存中存储的区别主要体现在数据表示和存储方式上:1.数据类型:  -整数(in......
  • 整数和浮点数在内存中的存储
    整数和浮点数在内存中的存储整数在内存中的存储浮点数在内存中的存储整数在内存中的存储1.整数是以二进制的形式存储的,一个二进制位会占据一个比特位的空间。例如:#include<stdio.h>intmain(){ inta=10;//十进制的形式 //1010二进制形式 //一个整型是四......
  • python 如何删除文件夹下的所有文件和子文件夹?
    前言删除文件夹下的所有的文件,以及子文件下所有的文件,把这个文件夹全部删除。shutil.rmtree()删除先介绍一个最简单的方法,shutil.rmtree()importshutil#上海悠悠wx:283340479#blog:https://www.cnblogs.com/yoyoketang/shutil.rmtree('D:\\test',ignore_errors=Tru......
  • 在Linux中,有一堆日志文件,如何删除7天前的日志文件?
    在Linux中,如果你想要删除7天前的日志文件,你可以使用find命令配合-mtime选项来实现。下面是一个详细的步骤说明:1.确定日志文件所在的目录首先,你需要知道这些日志文件存放在哪个目录下。例如,假设你的日志文件都存放在/var/log/目录下。2.使用find命令查找并删除文件你可以使用......
  • 删除有序链表中重复的元素-1
    描述删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次例如:给出的链表\(1\to1\to2\),返回\(1\to2\)给出的链表为\(1\to1\to2\to3\to3\),返回\(1\to2\to3\)数据范围:链表长度满足\(0\len\le100\),,链表中任意节点的值满足\(\midval\mid\le1......
  • 450. 删除二叉搜索树中的节点c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*leftleave(structTreeNode*root){if(root->left){root=root->left;......