Greedy Algorithms and Backtracking
π Introduction
π’ Greedy Algorithms
When Greedy Works
π Classic Greedy Problems
Activity Selection
def max_activities(start: list[int], end: list[int]) -> list[int]:
"""
Select maximum non-overlapping activities.
Greedy: Always pick activity that ends earliest.
Time: O(n log n)
"""
n = len(start)
activities = sorted(range(n), key=lambda i: end[i])
result = [activities[0]]
last_end = end[activities[0]]
for i in activities[1:]:
if start[i] >= last_end:
result.append(i)
last_end = end[i]
return result
# Example
start = [1, 3, 0, 5, 8, 5]
end = [2, 4, 6, 7, 9, 9]
print(max_activities(start, end)) # [0, 1, 3, 4]Jump Game
Gas Station
Task Scheduler
Partition Labels
Non-overlapping Intervals
Candy
β οΈ Greedy Pitfalls
When Greedy Fails
π Backtracking
Backtracking Template
π Backtracking Problems
Subsets
Permutations
Combinations
Combination Sum
N-Queens
Sudoku Solver
Word Search
π― Pruning Strategies
π Practice Exercises
Exercise 1: Restore IP Addresses
Exercise 2: Generate Parentheses
Exercise 3: Minimum Number of Arrows
π Key Takeaways
π What's Next?
π References
Last updated