获得最大的利益


Submit solution


Points: 370
Time limit: 1.0s
Memory limit: 10M

Author:
Problem type
Allowed languages
C, C++

给你一个整数数组 nums,你可以任意次执行以下操作来获得尽可能多的积分:

  • 从数组中选择任意一个元素 nums[i],将其删除并获得 nums[i] 分;
  • 然后,你必须同时删除所有等于 nums[i] - 1 和 nums[i] + 1 的元素。

请你返回,在若干次操作后你最多可以获得多少积分。

第一行输入一个整数n
第二行输入n个整数,用空格隔开

示例 1:

输入:

3
3 4 2

输出: 6

解释:
  • 删除 4,获得 4 分;同时删除 3。此时 nums = [2]
  • 删除 2,获得 2 分;nums = []
  • 总共得分为 \(4 + 2 = 6\)
示例 2:

输入:

6
2 2 3 3 3 4

输出:

9
解释:
  • 删除一个 3,获得 3 分,同时删除所有 2 和 4;nums = [3, 3]
  • 删除一个 3,获得 3 分;nums = [3]
  • 删除一个 3,获得 3 分;nums = []
    总共得分为 \(3 + 3 + 3 = 9\)
约束条件:

\(1 \le nums.length \le 20,000\)
\(1 \le nums[i] \le 10,000\)


Comments

There are no comments at the moment.