删除并获得点数

📅 2026/7/20 16:55:28
删除并获得点数
给你一个整数数组nums你可以对它进行一些操作。每次操作中选择任意一个nums[i]删除它并获得nums[i]的点数。之后你必须删除所有等于nums[i] - 1和nums[i] 1的元素。开始你拥有0个点数。返回你能通过这些操作获得的最大点数。示例 1输入nums [3,4,2]输出6解释你可以执行下列步骤 - 删除 4 获得 4 个点数因此 3 也被删除。nums [2]。 - 之后删除 2 获得 2 个点数。nums []。 总共获得 6 个点数。思路打家劫舍的变化题目打家劫舍你是一个专业的小偷计划偷窃沿街的房屋。每间房内都藏有一定的现金影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统如果两间相邻的房屋在同一晚上被小偷闯入系统会自动报警。注意到若 nums 中不存在某个元素 x则选择任一小于 x 的元素不会影响到大于 x 的元素的选择。因此我们可以将 nums 排序后将其划分成若干连续子数组子数组内任意相邻元素之差不超过 1。对每个子数组按照打家劫舍的动态规划过程计算出结果累加所有结果即为答案。from typing import List class Solution: def deleteAndEarn(self, nums: List[int]) - int: def rob(nums)-int: if len(nums) 1: return nums[0] first,second nums[0], max(nums[0], nums[1]) for i in range(2, len(nums)): first,second second, max(firstnums[i], second) return second ans0 nums.sort() tools[nums[0]] for i in range(1, len(nums)): if nums[i]nums[i-1]: tools[-1]nums[i] elif nums[i]nums[i-1]1: tools.append(nums[i]) else: ansrob(tools) tools[nums[i]] return ansrob(tools)