Skip to content

Commit d782511

Browse files
author
Mauricio Klein
committed
Add solution for challenge #41
1 parent 8c6c81e commit d782511

File tree

6 files changed

+73
-0
lines changed

6 files changed

+73
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,4 @@
4040
- [x] [Challenge 38: Remove k-th Last Element From Linked List](challenge-38/)
4141
- [x] [Challenge 39: Remove Consecutive Nodes that Sum to 0](challenge-39/)
4242
- [x] [Challenge 40: Queue Using Two Stacks](challenge-40/)
43+
- [x] [Challenge 41: Maximum sequence of consecutive numbers](challenge-41/)

challenge-41/Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
test:
2+
python test_*.py
3+
4+
.PHONY: test

challenge-41/README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Maximum sequence of consecutive numbers
2+
3+
This problem was asked by Facebook.
4+
5+
## Description
6+
7+
Given a list of integers L, find the maximum length of a sequence of consecutive numbers that can be formed using elements from L.
8+
9+
## Example
10+
```
11+
Input: [5, 2, 99, 3, 4, 1, 100]
12+
Output: 5 # [1, 2, 3, 4, 5]
13+
```

challenge-41/__init__.py

Whitespace-only changes.

challenge-41/solver.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#
2+
# Time complexity: O(n*log(n)) (for the sorting)
3+
# Space complexity: O(1)
4+
#
5+
def max_sequence_length(nums):
6+
nums.sort()
7+
8+
max_seq, cur_seq = 0, 0
9+
prev_num = None
10+
11+
for num in nums:
12+
if prev_num == None or prev_num + 1 == num:
13+
cur_seq += 1
14+
else:
15+
max_seq = max(max_seq, cur_seq)
16+
cur_seq = 1
17+
18+
prev_num = num
19+
20+
# Remaining
21+
max_seq = max(max_seq, cur_seq)
22+
23+
return max_seq

challenge-41/test_solver.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import unittest
2+
import random
3+
from solver import max_sequence_length
4+
5+
class TestSolver(unittest.TestCase):
6+
def test_max_sequence_length(self):
7+
nums = [1,2,3,4,5,99,100]
8+
random.shuffle(nums)
9+
self.assertEqual(max_sequence_length(nums), 5) # [1, 2, 3, 4, 5]
10+
11+
nums = [1,2,5,6,7,15,16]
12+
random.shuffle(nums)
13+
self.assertEqual(max_sequence_length(nums), 3) # [5, 6, 7]
14+
15+
nums = [1,3,5,7,9]
16+
random.shuffle(nums)
17+
self.assertEqual(max_sequence_length(nums), 1)
18+
19+
nums = [-2,-1,0,1,2,5,6]
20+
random.shuffle(nums)
21+
self.assertEqual(max_sequence_length(nums), 5) # [-2, -1, 0, 1, 2]
22+
23+
nums = [1,2,5,6,7,8,9]
24+
random.shuffle(nums)
25+
self.assertEqual(max_sequence_length(nums), 5) # [5,6,7,8,9]
26+
27+
nums = []
28+
random.shuffle(nums)
29+
self.assertEqual(max_sequence_length(nums), 0)
30+
31+
if __name__ == "__main__":
32+
unittest.main()

0 commit comments

Comments
 (0)