Skip to content

Commit a193787

Browse files
authored
Merge pull request #1612 from ivanpenaloza/april19
adding algo
2 parents ccfeea2 + 4532fbe commit a193787

3 files changed

Lines changed: 51 additions & 0 deletions

File tree

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from typing import List
2+
import bisect
3+
4+
5+
class Solution:
6+
def lengthOfLIS(self, nums: List[int]) -> int:
7+
tails = []
8+
for num in nums:
9+
pos = bisect.bisect_left(tails, num)
10+
if pos == len(tails):
11+
tails.append(num)
12+
else:
13+
tails[pos] = num
14+
return len(tails)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
function lengthOfLIS(nums: number[]): number {
2+
const tails: number[] = [];
3+
for (const num of nums) {
4+
let lo = 0, hi = tails.length;
5+
while (lo < hi) {
6+
const mid = (lo + hi) >> 1;
7+
if (tails[mid] < num) lo = mid + 1;
8+
else hi = mid;
9+
}
10+
tails[lo] = num;
11+
}
12+
return tails.length;
13+
};
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import unittest
2+
from src.my_project.interviews.top_150_questions_round_22\
3+
.ex_136_longest_increasing_subsequence import Solution
4+
5+
6+
class IncreasingLongestSubquenceTestCase(unittest.TestCase):
7+
def setUp(self):
8+
self.solution = Solution()
9+
10+
def test_example1(self):
11+
self.assertEqual(self.solution.lengthOfLIS([10, 9, 2, 5, 3, 7, 101, 18]), 4)
12+
13+
def test_example2(self):
14+
self.assertEqual(self.solution.lengthOfLIS([0, 1, 0, 3, 2, 3]), 4)
15+
16+
def test_example3(self):
17+
self.assertEqual(self.solution.lengthOfLIS([7, 7, 7, 7, 7, 7, 7]), 1)
18+
19+
def test_single_element(self):
20+
self.assertEqual(self.solution.lengthOfLIS([5]), 1)
21+
22+
23+
if __name__ == '__main__':
24+
unittest.main()

0 commit comments

Comments
 (0)