740. 删除并获得点数
给你一个整数数组 nums
,你可以对它进行一些操作。
每次操作中,选择任意一个 nums[i]
,删除它并获得 nums[i]
的点数。之后,你必须删除 所有 等于 nums[i] - 1
和 nums[i] + 1
的元素。
开始你拥有 0
个点数。返回你能通过这些操作获得的最大点数。
示例 1:
1 | 输入:nums = [3,4,2] |
示例 2:
1 | 输入:nums = [2,2,3,3,3,4] |
提示:
1 <= nums.length <= 2 * 104
1 <= nums[i] <= 104
题解:
类似于“打家劫舍“升级版,提升了报警系统,在偷金额为3的房间的时候,金额为2和金额为4的房间会报警,但是其余金额为3的房间继续偷就不会触发报警系统。
代码如下:
1 | public int deleteAndEarn(int[] nums) { |
- 时间复杂度:O(N),需要遍历数组。
- 空间复杂度:O(N),需要两个辅助数组。