题目链接

删除并获得点数

题目描述

image.png

实现代码

思路:由题意得知,如果选择元素值x,那么元素值x相邻的两个整数x-1 和 x+1都不能被选取,同时将所有的x选取并删除;因此,我们可以先将数组进行排序,然后将重复元素进行移除并累加,最终得到缩减版的无重复元素的排序数组,然后问题就演变成了打家劫舍;

实现代码如下(这里未使用排序 + dp,直接使用的dp):

  1. class Solution {
  2. public int deleteAndEarn(int[] nums) {
  3. int maxVal = 0;
  4. for (int val : nums) {
  5. maxVal = Math.max(maxVal, val);
  6. }
  7. int[] sum = new int[maxVal + 1];
  8. for (int val : nums) {
  9. sum[val] += val;
  10. }
  11. return rob(sum);
  12. }
  13. public int rob(int[] nums) {
  14. int size = nums.length;
  15. int first = nums[0], second = Math.max(nums[0], nums[1]);
  16. for (int i = 2; i < size; i++) {
  17. int temp = second;
  18. second = Math.max(first + nums[i], second);
  19. first = temp;
  20. }
  21. return second;
  22. }
  23. }