mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
135 lines
5.3 KiB
Plaintext
135 lines
5.3 KiB
Plaintext
---
|
|
title: Keywords
|
|
description: Coding problems rarely tell you which algorithm to use, but the wording usually leaks it. "K-th largest" hints at a heap. "Shortest path" in an unweighted graph hints at BFS.
|
|
icon: map
|
|
---
|
|
|
|
Each entry below names the keyword, the algorithm it points to, and a one-line reason. Where a keyword has more than one possible technique, each option is listed with the sub-signal that picks it. Techniques you haven't studied yet are covered later in the course.
|
|
|
|
## "Top K"
|
|
|
|
Heap — track the K-item boundary in O(n log K) instead of sorting all n. K Closest Points
|
|
|
|
## "Sorted" / "rotated sorted" / "in O(log n)"
|
|
|
|
Binary Search — halve the search space at each step using order. Works on any monotonic predicate, not just literal arrays. Binary Search
|
|
|
|
## "How many ways..."
|
|
|
|
Counting distinct outcomes — choose by what the input looks like.
|
|
|
|
- DFS, when choices form a tree of decisions. Decode Ways
|
|
- DP, when subproblems overlap on a grid or sequence. Robot Paths
|
|
|
|
## "Substring"
|
|
|
|
Sliding Window — contiguous slices extend and shrink in O(1) at each step. Longest Substring Without Repeating Characters
|
|
|
|
## "Prefix" / "autocomplete" / "dictionary lookup" / "starts with"
|
|
|
|
Trie — share storage for common prefixes; lookup runs in O(length of word) regardless of dictionary size. Implement Trie
|
|
|
|
## "Palindrome"
|
|
|
|
Palindromes mirror around a center — choose by whether you're verifying or constructing.
|
|
|
|
- Two Pointers, to verify a single string. Valid Palindrome
|
|
- DFS, to enumerate every valid partition. Palindrome Partitioning
|
|
- DP, to minimize cuts or count partitions. Palindrome Partitioning II
|
|
|
|
## "Tree"
|
|
|
|
One question decides everything: do you care about depth, or just need to visit every node?
|
|
|
|
- BFS, for level-order, shallowest depth, or "right-side view". Binary Tree Level-Order Traversal
|
|
- DFS, for sums, heights, paths — anything not level-related. Max Depth
|
|
|
|
## "Parentheses"
|
|
|
|
Stack — brackets close in reverse order, last opened first closed (LIFO). Valid Parentheses
|
|
|
|
## "Next greater" / "next smaller" / "warmer day"
|
|
|
|
Monotonic Stack — keep candidates in stack order so the answer for each element pops out in O(1) amortized. Next Greater Element II
|
|
|
|
## "Subarray"
|
|
|
|
Contiguous slices, but the right tool depends on what you're computing.
|
|
|
|
- Sliding Window, for fixed size or a monotonic constraint. Subarray Sum Fixed
|
|
- Prefix Sum, for range-sum queries. Subarray Sum
|
|
- Hashmap of prefix sums, for sum equals a target. Continuous Subarray Sum
|
|
|
|
## "Max subarray"
|
|
|
|
Greedy (Kadane's) — at each index, extend the run or restart; the choice is local. Kadane's Algorithm
|
|
|
|
## "Two sum / K sum"
|
|
|
|
Two Pointers on a sorted array — each move strictly raises or lowers the sum. Two Sum
|
|
|
|
## "Max/longest sequence"
|
|
|
|
"Longest" usually means each position depends on earlier ones — except when a fixed window is involved.
|
|
|
|
- DP / DFS with memoization, when a position depends on earlier positions. Longest Increasing Subsequence
|
|
- Monotonic Deque, for max within a sliding window. Sliding Window Maximum
|
|
|
|
## "Minimum/Shortest"
|
|
|
|
Three very different problems wear the same word.
|
|
|
|
- BFS, for fewest edges in an unweighted graph. Shortest Path
|
|
- Dijkstra, for shortest path with non-negative edge weights. Dijkstra's Algorithm
|
|
- DP / DFS, for cumulative cost on a grid or sequence. Minimal Path Sum
|
|
|
|
## "Partition/split"
|
|
|
|
DFS — each split point is a recursive choice; memoize if suffixes repeat. Decode Ways
|
|
|
|
## "Subsequence"
|
|
|
|
DP / DFS with memoization — pick-or-skip at each index, with overlapping subproblems. Longest Increasing Subsequence
|
|
|
|
## "All combinations / permutations / subsets" / "generate every"
|
|
|
|
Backtracking — DFS that records a partial solution, recurses, then undoes the choice on the way back up. Permutations, Subsets
|
|
|
|
## "Matrix"
|
|
|
|
A grid is a graph. Connectivity questions are BFS/DFS; optimization questions are DP.
|
|
|
|
- BFS / DFS, for connectivity, flood-fill, or region counting. Flood Fill, Number of Islands
|
|
- DP, for optimization where each cell builds on neighbors. Maximal Square
|
|
|
|
## "Jump"
|
|
|
|
Greedy when local-optimal is provably global; DP otherwise.
|
|
|
|
- Greedy, when "always reach as far as possible" works (typically reachability). Jump Game
|
|
- DP, when counting jumps or greedy fails. Jump Game II
|
|
|
|
## "Game"
|
|
|
|
DP on game states — "can the player to move force a win?" recurses with overlap. Divisor Game
|
|
|
|
## "Connected component"
|
|
|
|
Union Find — near-O(1) union and find beat re-running BFS after each edge. Use BFS or DFS instead when the graph is built once and you only traverse a few times. Number of Connected Components
|
|
|
|
## "Schedule" / "prerequisites" / "build order" / "course"
|
|
|
|
Topological Sort (Kahn's BFS or DFS post-order) — directed dependencies must be linearized so every edge points forward. Detects cycles as a side effect. Course Schedule
|
|
|
|
## "Transitive relationship"
|
|
|
|
If A relates to B and B relates to C means A relates to C, the relation is a graph in disguise. Items become nodes, relations become edges, and "are these two related?" becomes "are they in the same component?"
|
|
|
|
- BFS, to answer a single query by traversing on the fly. Word Ladder
|
|
- BFS or Union Find, for many queries on a fixed relation set. Sentence Similarity
|
|
- BFS or Union Find, for numbers with divisional relationships. Evaluate Division
|
|
|
|
## "Interval"
|
|
|
|
Greedy after sorting — by start (merge) or by end (fit-in), then one pass. Interval Pattern
|