Do I need to track what I’ve seen?
YES → Use HashMap (if need counts/values) or Set (if just checking presence) Examples: Two Sum, Longest Substring Without Repeating Characters
Do I need to maintain order and remove from both ends?
YES → Use Deque Examples: Sliding window maximum, BFS traversal
Do I need to match or validate pairs?
YES → Use Stack Examples: Valid Parentheses, Daily Temperatures
Am I working with a contiguous subarray or substring?
YES → Use Sliding Window pattern (often with Set or HashMap) Examples: Maximum sum subarray, substring problems
Do I need the smallest or largest elements repeatedly?
YES → Use Heap Examples: Top K elements, Kth largest element
Is the input sorted or can I sort it?
YES → Use Two Pointers Examples: Two Sum II, Container with Most Water