一、题目解析
二、算法原理
根据题意,在选择了元素 x 后,该元素以及所有等于 x−1 或 x+1 的元素会从数组中删去。若还有多个值为 x 的元素,由于所有等于 x−1 或 x+1 的元素已经被删除,我们可以直接删除 x 并获得其点数。因此若选择了 x,所有等于 x 的元素也应一同被选择,以尽可能多地获得点数。
若数字val在数组中出现的次数为a,我们利用另一个数组dp来记录数组中该数出现的总数dp[val]==a*val。再创建出数组f,f[n]表示选择n这个点数时获得的最大点数,数组g,g[n]表示不选择n这个点数时获得的最大点数。返回f[n]和g[n]的较大值即为所求。
三、代码解析