Skip to content

Commit 07427c6

Browse files
authored
Merge pull request #1560 from ivanpenaloza/february26
adding algo
2 parents ae87b77 + 4b78028 commit 07427c6

5 files changed

Lines changed: 163 additions & 0 deletions

File tree

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from typing import List, Union, Collection, Mapping, Optional
2+
from abc import ABC, abstractmethod
3+
4+
class Solution:
5+
def twoSum(self, nums: List[int], target: int) -> List[int]:
6+
7+
answer = dict()
8+
9+
for k, v in enumerate(nums):
10+
11+
if v in answer:
12+
return [answer[v], k]
13+
else:
14+
answer[target - v] = k
15+
16+
return []
17+
18+
19+
20+
21+
22+
23+
24+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from typing import List, Union, Collection, Mapping, Optional
2+
from abc import ABC, abstractmethod
3+
import re
4+
5+
class Solution:
6+
def isPalindrome(self, s: str) -> bool:
7+
8+
# To lowercase
9+
s = s.lower()
10+
11+
# Remove non-alphanumeric characters
12+
s = re.sub(pattern=r'[^a-zA-Z0-9]', repl='', string=s)
13+
14+
# Determine if s is palindrome or not
15+
len_s = len(s)
16+
17+
for i in range(len_s//2):
18+
19+
if s[i] != s[len_s - 1 - i]:
20+
return False
21+
22+
return True
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from typing import List, Union, Collection, Mapping, Optional
2+
from abc import ABC, abstractmethod
3+
from collections import deque, defaultdict
4+
5+
class Solution:
6+
def canFinish(self, numCourses: int,
7+
prerequisites: List[List[int]]) -> bool:
8+
# Build adjacency list and in-degree array
9+
graph = defaultdict(list)
10+
in_degree = [0] * numCourses
11+
12+
for course, prereq in prerequisites:
13+
graph[prereq].append(course)
14+
in_degree[course] += 1
15+
16+
# Add all courses with no prerequisites to queue
17+
queue = deque([i for i in range(numCourses) if in_degree[i] == 0])
18+
courses_taken = 0
19+
20+
# Process courses
21+
while queue:
22+
course = queue.popleft()
23+
courses_taken += 1
24+
25+
# Reduce in-degree for dependent courses
26+
for next_course in graph[course]:
27+
in_degree[next_course] -= 1
28+
if in_degree[next_course] == 0:
29+
queue.append(next_course)
30+
31+
# If we took all courses, no cycle exists
32+
return courses_taken == numCourses
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
function canFinish(numCourses: number, prerequisites: number[][]): boolean {
2+
// Build adjacency list and in-degree array
3+
const graph: Map<number, number[]> = new Map();
4+
const inDegree: number[] = new Array(numCourses).fill(0);
5+
6+
// Initialize graph
7+
for (let i = 0; i < numCourses; i++) {
8+
graph.set(i, []);
9+
}
10+
11+
// Build graph and calculate in-degrees
12+
for (const [course, prereq] of prerequisites) {
13+
graph.get(prereq)!.push(course);
14+
inDegree[course]++;
15+
}
16+
17+
// Add all courses with no prerequisites to queue
18+
const queue: number[] = [];
19+
for (let i = 0; i < numCourses; i++) {
20+
if (inDegree[i] === 0) {
21+
queue.push(i);
22+
}
23+
}
24+
25+
let coursesTaken = 0;
26+
27+
// Process courses using BFS (Kahn's algorithm)
28+
while (queue.length > 0) {
29+
const course = queue.shift()!;
30+
coursesTaken++;
31+
32+
// Reduce in-degree for dependent courses
33+
for (const nextCourse of graph.get(course)!) {
34+
inDegree[nextCourse]--;
35+
if (inDegree[nextCourse] === 0) {
36+
queue.push(nextCourse);
37+
}
38+
}
39+
}
40+
41+
// If we took all courses, no cycle exists
42+
return coursesTaken === numCourses;
43+
}
44+
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import unittest
2+
from src.my_project.interviews.top_150_questions_round_22\
3+
.ex_88_course_schedule import Solution
4+
from typing import Optional, List
5+
6+
7+
class CourseScheduleTestCase(unittest.TestCase):
8+
9+
def test_example_1(self):
10+
"""
11+
Example 1:
12+
Input: numCourses = 2, prerequisites = [[1,0]]
13+
Output: true
14+
Explanation: There are a total of 2 courses to take.
15+
To take course 1 you should have finished course 0. So it is possible.
16+
"""
17+
solution = Solution()
18+
numCourses = 2
19+
prerequisites = [[1, 0]]
20+
expected = True
21+
22+
result = solution.canFinish(numCourses, prerequisites)
23+
self.assertEqual(result, expected)
24+
25+
def test_example_2(self):
26+
"""
27+
Example 2:
28+
Input: numCourses = 2, prerequisites = [[1,0],[0,1]]
29+
Output: false
30+
Explanation: There are a total of 2 courses to take.
31+
To take course 1 you should have finished course 0, and to take course 0
32+
you should also have finished course 1. So it is impossible.
33+
"""
34+
solution = Solution()
35+
numCourses = 2
36+
prerequisites = [[1, 0], [0, 1]]
37+
expected = False
38+
39+
result = solution.canFinish(numCourses, prerequisites)
40+
self.assertEqual(result, expected)
41+

0 commit comments

Comments
 (0)