• 740. Delete and Earn


    #week14

    Given an array nums of integers, you can perform operations on the array.

    In each operation, you pick any nums[i] and delete it to earn nums[i] points. After, you must delete every element equal to nums[i] - 1 or nums[i] + 1.

    You start with 0 points. Return the maximum number of points you can earn by applying such operations.

    Example 1:

    Input: nums = [3, 4, 2]
    Output: 6
    Explanation: 
    Delete 4 to earn 4 points, consequently 3 is also deleted.
    Then, delete 2 to earn 2 points. 6 total points are earned.
    

    Example 2:

    Input: nums = [2, 2, 3, 3, 3, 4]
    Output: 9
    Explanation: 
    Delete 3 to earn 3 points, deleting both 2's and the 4.
    Then, delete 3 again to earn 3 points, and 3 again to earn 3 points.
    9 total points are earned.
    

    Note:

    • The length of nums is at most 20000.
    • Each element nums[i] is an integer in the range [1, 10000].

    题解:

     1 class Solution {
     2 public:
     3     int deleteAndEarn(vector<int>& nums) {
     4         int n = 10001;
     5         vector<int> values(n, 0);
     6         for (int num : nums)
     7             values[num] += num;
     8 
     9         int take = 0, skip = 0;
    10         for (int i = 0; i < n; i++) {
    11             int takei = skip + values[i];
    12             int skipi = max(skip, take);
    13             take = takei;
    14             skip = skipi;
    15         }
    16         return max(take, skip);
    17     }
    18 };
  • 相关阅读:
    集合的概述
    mysql修改用户名密码
    CentOS7 安装Chrome的方法
    常用sql汇总
    Rabbitmq六大应用模式
    高可用RabbitMQ集群搭建
    docker-compose
    Haystack
    幂等性问题剖析
    用redis构建分布式锁
  • 原文地址:https://www.cnblogs.com/iamxiaoyubei/p/8278273.html
Copyright © 2020-2023  润新知