Skip to content

Commit 621eea6

Browse files
committed
📝 update alg lc 594
1 parent 0cdf5ec commit 621eea6

2 files changed

Lines changed: 105 additions & 1 deletion

File tree

Java/alg/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,5 @@
7373
- [509.斐波那契数](lc/509.斐波那契数.md)
7474
- [543.二叉树的直径](lc/543.二叉树的直径.md)
7575
- [566.重塑矩阵](lc/566.重塑矩阵.md)
76-
- [572.另一个树的子树](lc/572.另一个树的子树.md)
76+
- [572.另一个树的子树](lc/572.另一个树的子树.md)
77+
- [594.最长和谐子序列](lc/594.最长和谐子序列.md)
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# 594. 最长和谐子序列
2+
3+
4+
[url](https://leetcode-cn.com/problems/longest-harmonious-subsequence/)
5+
6+
7+
## 题目
8+
和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。
9+
10+
现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。
11+
12+
数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。
13+
14+
15+
16+
```
17+
输入:nums = [1,3,2,2,5,2,3,7]
18+
输出:5
19+
解释:最长的和谐子序列是 [3,2,2,2,3]
20+
输入:nums = [1,2,3,4]
21+
输出:2
22+
输入:nums = [1,1,1,1]
23+
输出:0
24+
```
25+
返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。
26+
27+
## 方法
28+
29+
30+
## code
31+
32+
### js
33+
34+
```js
35+
let findLHS = nums => {
36+
let map = new Map();
37+
nums.forEach(num => {
38+
if (map.has(num)) {
39+
map.set(num, map.get(num) + 1);
40+
} else {
41+
map.set(num , 1);
42+
}
43+
});
44+
let longest = 0;
45+
for (const key of map.keys()) {
46+
if (map.has(key + 1)) {
47+
longest = Math.max(longest, map.get(key + 1) + map.get(key));
48+
}
49+
}
50+
return longest;
51+
};
52+
console.log(findLHS([1,3,2,2,5,2,3,7]))
53+
```
54+
55+
### go
56+
57+
```go
58+
func findLHS(nums []int) int {
59+
m := make(map[int]int, len(nums))
60+
for _, num := range nums {
61+
if v, ok := m[num]; ok {
62+
m[num] = v + 1
63+
} else {
64+
m[num] = 1
65+
}
66+
}
67+
longest := 0
68+
for _, k := range m {
69+
if v, ok := m[k + 1]; ok {
70+
longest = max3(longest, v + m[k])
71+
}
72+
}
73+
return longest
74+
}
75+
func max3(a int , b int) int {
76+
if a > b {
77+
return a
78+
} else {
79+
return b
80+
}
81+
}
82+
```
83+
84+
### java
85+
86+
```java
87+
class Solution {
88+
public int findLHS(int[] nums) {
89+
Map<Integer, Integer> map = new HashMap<>();
90+
for (int num : nums) {
91+
map.put(num, map.getOrDefault(num, 0) + 1);
92+
}
93+
int longest = 0;
94+
for (int num : map.keySet()) {
95+
if (map.containsKey(num + 1)) {
96+
longest = Math.max(longest, map.get(num + 1) + map.get(num));
97+
}
98+
}
99+
return longest;
100+
}
101+
}
102+
```
103+

0 commit comments

Comments
 (0)