Skip to content

Commit e896fd5

Browse files
Add files via upload
1 parent 234cd74 commit e896fd5

File tree

2 files changed

+115
-0
lines changed

2 files changed

+115
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// 题目要求是on的时间复杂度,首先使用nlgn的排序思想解决问题
2+
3+
// Runtime: 12 ms, faster than 99.79% of C++ online submissions for Longest Consecutive Sequence.
4+
// Memory Usage: 9 MB, less than 98.36% of C++ online submissions for Longest Consecutive Sequence.
5+
6+
class Solution
7+
{
8+
public:
9+
int longestConsecutive(vector<int>& nums)
10+
{
11+
if (nums.size() == 0)
12+
return 0;
13+
14+
sort(nums.begin(), hashmap.end());
15+
16+
int maxLength = 1;
17+
for (int i = 1, length = 1; i < nums.size(); i++)
18+
{
19+
if (num == nums[i - 1] + 1)
20+
{
21+
length++;
22+
maxLength = max(maxLength, length);
23+
}
24+
else if (num == nums[i - 1])
25+
;
26+
else
27+
length = 1;
28+
}
29+
return maxLength;
30+
}
31+
};
32+
33+
// 思路二,on的时间复杂度的版本
34+
// Runtime: 16 ms, faster than 71.73% of C++ online submissions for Longest Consecutive Sequence.
35+
// Memory Usage: 10.2 MB, less than 37.71% of C++ online submissions for Longest Consecutive Sequence.
36+
class Solution
37+
{
38+
public:
39+
int longestConsecutive(vector<int>& nums)
40+
{
41+
unordered_map<int, int> hashmap;
42+
int maxLength = 0;
43+
44+
// 对数组中的每一个数字进行O(1)的计算
45+
for (auto num : nums)
46+
{
47+
// 如果当前数字已经存在于哈希表中,就没有必要二次操作了
48+
if (hashmap.find(num) == hashmap.end())
49+
{
50+
auto rightIter = hashmap.find(num + 1);
51+
auto leftIter = hashmap.find(num - 1);
52+
53+
int left = leftIter == hashmap.end() ? 0 : leftIter->second;
54+
int right = rightIter == hashmap.end() ? 0 : rightIter->second;
55+
56+
int length = left + right + 1;
57+
maxLength = max(maxLength, length);
58+
59+
hashmap.insert(make_pair(num, length));
60+
61+
hashmap.at(num - left) = length;
62+
hashmap.at(num + right) = length;
63+
}
64+
}
65+
return maxLength;
66+
}
67+
};
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# 思路一的py代码
2+
3+
# Runtime: 40 ms, faster than 88.35% of Python3 online submissions for Longest Consecutive Sequence.
4+
# Memory Usage: 12.9 MB, less than 99.52% of Python3 online submissions for Longest Consecutive Sequence.
5+
6+
class Solution:
7+
def longestConsecutive(self, nums: 'List[int]') -> 'int':
8+
if not nums:
9+
return 0
10+
11+
nums.sort()
12+
13+
Length, maxLength = 1, 1
14+
for i in range(1, len(nums)):
15+
if nums[i] == nums[i - 1] + 1:
16+
Length += 1
17+
maxLength = max(maxLength, Length)
18+
elif nums[i] == nums[i - 1]:
19+
pass
20+
else:
21+
Length = 1
22+
23+
return maxLength
24+
25+
# 思路二的py代码
26+
# Runtime: 40 ms, faster than 88.35% of Python3 online submissions for Longest Consecutive Sequence.
27+
# Memory Usage: 13.4 MB, less than 66.67% of Python3 online submissions for Longest Consecutive Sequence.
28+
29+
class Solution:
30+
def longestConsecutive(self, nums: 'List[int]') -> 'int':
31+
hashmap = dict()
32+
maxLength = 0
33+
34+
for num in nums:
35+
if num not in hashmap:
36+
37+
right = hashmap[num + 1] if num + 1 in hashmap else 0
38+
left = hashmap[num - 1] if num - 1 in hashmap else 0
39+
40+
length = left + right + 1
41+
maxLength = max(length, maxLength)
42+
43+
hashmap[num] = length
44+
hashmap[num - left] = length
45+
hashmap[num + right] = length
46+
47+
return maxLength
48+

0 commit comments

Comments
 (0)