Skip to content

Commit 9f0ad1c

Browse files
author
lucifer
committed
2 parents 6257eee + 5d6feda commit 9f0ad1c

File tree

1 file changed

+48
-1
lines changed

1 file changed

+48
-1
lines changed

problems/128.longest-consecutive-sequence.md

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,53 @@ return Math.max(count, maxCount);
7171

7272
## 代码
7373

74+
代码支持:Java, Python,JS
75+
76+
Java Code:
77+
78+
```java
79+
class Solution {
80+
public int longestConsecutive(int[] nums) {
81+
Set<Integer> set = new HashSet<Integer>();
82+
int ans = 0;
83+
for (int num : nums) {
84+
set.add(num);
85+
}
86+
for(int i = 0;i < nums.length; i ++) {
87+
int x = nums[i];
88+
// 说明x是连续序列的开头元素
89+
if (!set.contains(x - 1)) {
90+
while(set.contains(x + 1)) {
91+
x ++;
92+
}
93+
}
94+
ans = Math.max(ans, x - nums[i] + 1);
95+
}
96+
return ans;
97+
98+
}
99+
}
100+
```
101+
102+
Python Code:
103+
104+
```py
105+
class Solution:
106+
def longestConsecutive(self, A: List[int]) -> int:
107+
seen = set(A)
108+
ans = 0
109+
for a in A:
110+
t = a
111+
# if 的作用是剪枝
112+
if t + 1 not in seen:
113+
while t - 1 in seen:
114+
t -= 1
115+
ans = max(ans, a - t + 1)
116+
return ans
117+
```
118+
119+
JS Code:
120+
74121
```js
75122
/**
76123
* @param {number[]} nums
@@ -81,7 +128,7 @@ var longestConsecutive = function(nums) {
81128
let max = 0;
82129
let temp = 0;
83130
set.forEach(x => {
84-
// 说明x是连续序列的开头元素
131+
// 说明x是连续序列的开头元素。加这个条件相当于剪枝的作用,否则时间复杂度会退化到 N ^ 2
85132
if (!set.has(x - 1)) {
86133
temp = x + 1;
87134
while (set.has(y)) {

0 commit comments

Comments
 (0)