Skip to content

Commit 755bc12

Browse files
committed
feat: add solutions to lc problem: No.0594. Longest Harmonious
Subsequence
1 parent 0ee3f19 commit 755bc12

File tree

6 files changed

+197
-4
lines changed

6 files changed

+197
-4
lines changed

solution/0500-0599/0594.Longest Harmonious Subsequence/README.md

+70-2
Original file line numberDiff line numberDiff line change
@@ -45,27 +45,95 @@
4545
<li><code>-10<sup>9</sup> <= nums[i] <= 10<sup>9</sup></code></li>
4646
</ul>
4747

48-
4948
## 解法
5049

5150
<!-- 这里可写通用的实现逻辑 -->
5251

52+
先用哈希表统计每个元素出现的次数。然后遍历数组,判断比每个元素 `num` 大 1 的数字 `num + 1` 是否在哈希表中,若是,累计 `num``num + 1` 出现的次数,与最大值 res 比较。若更大,则替换。最后返回 res 即可。
53+
5354
<!-- tabs:start -->
5455

5556
### **Python3**
5657

5758
<!-- 这里可写当前语言的特殊实现逻辑 -->
5859

5960
```python
60-
61+
class Solution:
62+
def findLHS(self, nums: List[int]) -> int:
63+
counter = collections.Counter(nums)
64+
res = 0
65+
for num in nums:
66+
if num + 1 in counter:
67+
res = max(res, counter[num] + counter[num + 1])
68+
return res
6169
```
6270

6371
### **Java**
6472

6573
<!-- 这里可写当前语言的特殊实现逻辑 -->
6674

6775
```java
76+
class Solution {
77+
public int findLHS(int[] nums) {
78+
Map<Integer, Integer> counter = new HashMap<>();
79+
for (int num : nums) {
80+
counter.put(num, counter.getOrDefault(num, 0) + 1);
81+
}
82+
int res = 0;
83+
for (int num : nums) {
84+
if (counter.containsKey(num + 1)) {
85+
res = Math.max(res, counter.get(num) + counter.get(num + 1));
86+
}
87+
}
88+
return res;
89+
}
90+
}
91+
```
92+
93+
### **C++**
94+
95+
```cpp
96+
class Solution {
97+
public:
98+
int findLHS(vector<int>& nums) {
99+
unordered_map<int, int> counter;
100+
for (int num : nums) {
101+
++counter[num];
102+
}
103+
int res = 0;
104+
for (int num : nums) {
105+
if (counter.count(num + 1)) {
106+
res = max(res, counter[num] + counter[num + 1]);
107+
}
108+
}
109+
return res;
110+
}
111+
};
112+
```
68113
114+
### **Go**
115+
116+
```go
117+
func findLHS(nums []int) int {
118+
counter := make(map[int]int)
119+
for _, num := range nums {
120+
counter[num]++
121+
}
122+
res := 0
123+
for _, num := range nums {
124+
if counter[num+1] > 0 {
125+
res = max(res, counter[num]+counter[num+1])
126+
}
127+
}
128+
return res
129+
}
130+
131+
func max(a, b int) int {
132+
if a > b {
133+
return a
134+
}
135+
return b
136+
}
69137
```
70138

71139
### **...**

solution/0500-0599/0594.Longest Harmonious Subsequence/README_EN.md

+68-2
Original file line numberDiff line numberDiff line change
@@ -41,21 +41,87 @@
4141
<li><code>-10<sup>9</sup> &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
4242
</ul>
4343

44-
4544
## Solutions
4645

4746
<!-- tabs:start -->
4847

4948
### **Python3**
5049

5150
```python
52-
51+
class Solution:
52+
def findLHS(self, nums: List[int]) -> int:
53+
counter = collections.Counter(nums)
54+
res = 0
55+
for num in nums:
56+
if num + 1 in counter:
57+
res = max(res, counter[num] + counter[num + 1])
58+
return res
5359
```
5460

5561
### **Java**
5662

5763
```java
64+
class Solution {
65+
public int findLHS(int[] nums) {
66+
Map<Integer, Integer> counter = new HashMap<>();
67+
for (int num : nums) {
68+
counter.put(num, counter.getOrDefault(num, 0) + 1);
69+
}
70+
int res = 0;
71+
for (int num : nums) {
72+
if (counter.containsKey(num + 1)) {
73+
res = Math.max(res, counter.get(num) + counter.get(num + 1));
74+
}
75+
}
76+
return res;
77+
}
78+
}
79+
```
80+
81+
### **C++**
82+
83+
```cpp
84+
class Solution {
85+
public:
86+
int findLHS(vector<int>& nums) {
87+
unordered_map<int, int> counter;
88+
for (int num : nums) {
89+
++counter[num];
90+
}
91+
int res = 0;
92+
for (int num : nums) {
93+
if (counter.count(num + 1)) {
94+
res = max(res, counter[num] + counter[num + 1]);
95+
}
96+
}
97+
return res;
98+
}
99+
};
100+
```
58101
102+
### **Go**
103+
104+
```go
105+
func findLHS(nums []int) int {
106+
counter := make(map[int]int)
107+
for _, num := range nums {
108+
counter[num]++
109+
}
110+
res := 0
111+
for _, num := range nums {
112+
if counter[num+1] > 0 {
113+
res = max(res, counter[num]+counter[num+1])
114+
}
115+
}
116+
return res
117+
}
118+
119+
func max(a, b int) int {
120+
if a > b {
121+
return a
122+
}
123+
return b
124+
}
59125
```
60126

61127
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
int findLHS(vector<int>& nums) {
4+
unordered_map<int, int> counter;
5+
for (int num : nums) {
6+
++counter[num];
7+
}
8+
int res = 0;
9+
for (int num : nums) {
10+
if (counter.count(num + 1)) {
11+
res = max(res, counter[num] + counter[num + 1]);
12+
}
13+
}
14+
return res;
15+
}
16+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
func findLHS(nums []int) int {
2+
counter := make(map[int]int)
3+
for _, num := range nums {
4+
counter[num]++
5+
}
6+
res := 0
7+
for _, num := range nums {
8+
if counter[num+1] > 0 {
9+
res = max(res, counter[num]+counter[num+1])
10+
}
11+
}
12+
return res
13+
}
14+
15+
func max(a, b int) int {
16+
if a > b {
17+
return a
18+
}
19+
return b
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public int findLHS(int[] nums) {
3+
Map<Integer, Integer> counter = new HashMap<>();
4+
for (int num : nums) {
5+
counter.put(num, counter.getOrDefault(num, 0) + 1);
6+
}
7+
int res = 0;
8+
for (int num : nums) {
9+
if (counter.containsKey(num + 1)) {
10+
res = Math.max(res, counter.get(num) + counter.get(num + 1));
11+
}
12+
}
13+
return res;
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class Solution:
2+
def findLHS(self, nums: List[int]) -> int:
3+
counter = collections.Counter(nums)
4+
res = 0
5+
for num in nums:
6+
if num + 1 in counter:
7+
res = max(res, counter[num] + counter[num + 1])
8+
return res

0 commit comments

Comments
 (0)