Skip to content

Commit b0b7a7b

Browse files
committed
二刷740
1 parent 3c8684d commit b0b7a7b

File tree

3 files changed

+50
-12
lines changed

3 files changed

+50
-12
lines changed

docs/0740-delete-and-earn.adoc

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
[#0740-delete-and-earn]
22
= 740. 删除并获得点数
33

4-
https://leetcode.cn/problems/delete-and-earn/[LeetCode - 740. 删除并获得点数 ^]
4+
https://leetcode.cn/problems/delete-and-earn/[LeetCode - 740. 删除并获得点数^]
55

66
给你一个整数数组 `nums` ,你可以对它进行一些操作。
77

8-
每次操作中,选择任意一个 `nums[i]` ,删除它并获得 `nums[i]` 的点数。之后,你必须删除 *所有* 等于 `nums[i] - 1``nums[i] + 1` 的元素。
8+
每次操作中,选择任意一个 `nums[i]`,删除它并获得 `nums[i]` 的点数。之后,你必须删除 *所有* 等于 `nums[i] - 1``nums[i] + 1` 的元素。
99

1010
开始你拥有 `0` 个点数。返回你能通过这些操作获得的最大点数。
1111

@@ -55,20 +55,21 @@ include::{sourcedir}/_0740_DeleteAndEarn.java[tag=answer]
5555
----
5656
--
5757
58-
// 二刷::
59-
// +
60-
// --
61-
// [{java_src_attr}]
62-
// ----
63-
// include::{sourcedir}/_0740_DeleteAndEarn_2.java[tag=answer]
64-
// ----
65-
// --
58+
二刷::
59+
+
60+
--
61+
[{java_src_attr}]
62+
----
63+
include::{sourcedir}/_0740_DeleteAndEarn_2.java[tag=answer]
64+
----
65+
--
6666
====
6767

6868

6969
== 参考资料
7070

7171
. https://leetcode.cn/problems/delete-and-earn/solutions/758416/shan-chu-bing-huo-de-dian-shu-by-leetcod-x1pu/[740. 删除并获得点数 - 官方题解^]
72-
. https://leetcode.cn/problems/delete-and-earn/solutions/3061028/zhi-yu-da-jia-jie-she-pythonjavaccgojsru-e5gg/[740. 删除并获得点数 - 值域打家劫舍(Python/Java/C++/C/Go/JS/Rust)^]
72+
. https://leetcode.cn/problems/delete-and-earn/solutions/3061028/zhi-yu-da-jia-jie-she-pythonjavaccgojsru-e5gg/[740. 删除并获得点数 - 值域打家劫舍^]
73+
. https://leetcode.cn/problems/delete-and-earn/solutions/758623/gong-shui-san-xie-zhuan-huan-wei-xu-lie-6c9t0/[740. 删除并获得点数 - 转换为序列 DP 问题进行求解^]
7374

7475

logbook/202503.adoc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ endif::[]
8383
|{counter:codes2503e}
8484
|{leetcode_base_url}/delete-and-earn/[740. 删除并获得点数^]
8585
|{doc_base_url}/0740-delete-and-earn.adoc[题解]
86-
|❌
86+
|❌
8787

8888
|{counter:codes2503e}
8989
|{leetcode_base_url}/unique-paths-iii/[980. 不同路径 III^]
@@ -2660,6 +2660,11 @@ endif::[]
26602660
|{doc_base_url}/2560-house-robber-iv.adoc[题解]
26612661
|❌ 二分查找。找出所有数上下限,然后再找出中间数 `mid`,使用中间数去“抢劫”,统计能打劫(金额小于中间数)的房间数量,如果数量大于 `k`,则降低上限;否则,增大上限。这道题对二分查找的使用场景又做了拓宽:不仅仅可以使用已经排序的数组,同样可以适用隐含排序的数组。
26622662

2663+
|{counter:codes2503}
2664+
|{leetcode_base_url}/delete-and-earn/[740. 删除并获得点数^]
2665+
|{doc_base_url}/0740-delete-and-earn.adoc[题解]
2666+
|❌ 动态规划。最开始以为理解所有连续数字的和,后来发现理解错了。后来理解正确后,选定一个,删除上下紧挨的两个数,然后再选。这就是打家劫舍的思路了。
2667+
26632668
|===
26642669

26652670

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.diguage.algo.leetcode;
2+
3+
import jnr.ffi.annotations.In;
4+
5+
import java.util.*;
6+
7+
public class _0740_DeleteAndEarn_2 {
8+
// tag::answer[]
9+
10+
/**
11+
* @author D瓜哥 · https://www.diguage.com
12+
* @since 2025-12-20 12:45:14
13+
*/
14+
public int deleteAndEarn(int[] nums) {
15+
int max = Arrays.stream(nums).max().getAsInt();
16+
int[] values = new int[max + 1];
17+
for (int num : nums) {
18+
values[num] += num;
19+
}
20+
int[] dp = new int[max + 2];
21+
dp[1] = values[0];
22+
for (int i = 2; i <= max + 1; i++) {
23+
dp[i] = Math.max(dp[i - 1], dp[i - 2] + values[i - 1]);
24+
}
25+
return dp[max + 1];
26+
}
27+
// end::answer[]
28+
29+
static void main() {
30+
new _0740_DeleteAndEarn_2().deleteAndEarn(new int[]{3, 4, 2});
31+
}
32+
}

0 commit comments

Comments
 (0)