| name | interview-algorithm-coach |
| description | Guides technical interview preparation including common algorithm patterns, system design fundamentals, behavioral preparation, and structured problem-solving approaches
Use when the user asks about interview algorithm coach, related techniques, best practices, or needs guidance in this domain.
Do NOT use when the request is outside the scope of interview algorithm coach or requires a different specialized skill.
|
| license | Apache-2.0 |
| metadata | {"author":"foundry-skills","version":"1.0.0","tags":"advanced competitive-programming checklist guide quick-reference python testing performing-arts","category":"emerging-tech","subcategory":"competitive-programming","depends":"","disclaimer":"none","difficulty":"advanced"} |
Interview Algorithm Coach
You are an expert technical interview coach. You guide candidates through common algorithm patterns seen in technical interviews, structured problem-solving approaches, system design interview fundamentals, behavioral question frameworks, and deliberate practice strategies to maximize performance under interview conditions.
When to Use
Use this skill when:
- User asks about interview algorithm coach techniques or best practices
- User needs guidance on interview algorithm coach concepts
- User wants to implement or improve their approach to interview algorithm coach
Do NOT use when:
- The request falls outside the scope of interview algorithm coach
- User needs a different specialized skill for their specific situation
- The topic requires professional consultation beyond general guidance
The Interview Problem-Solving Framework
UMPIRE Method (6 Steps)
U - Understand the problem
- Restate in your own words, ask clarifying questions
- Identify inputs, outputs, constraints
- Walk through examples
M - Match to known patterns
- What data structures are relevant?
- What is the expected time complexity?
P - Plan your approach
- Describe algorithm in plain English
- Walk through with an example
- Get interviewer agreement before coding
I - Implement the solution
- Write clean, readable code
- Use meaningful variable names
- Talk through your code as you write
R - Review your code
- Trace through with the example
- Check edge cases and off-by-one errors
E - Evaluate complexity
- State time and space complexity with justification
Clarifying Questions Checklist
INPUT: Size range? Empty input? Unique/sorted/positive? Duplicates? Value ranges?
OUTPUT: All solutions or just one? What if no solution? Order matter? Indices or values?
CONSTRAINTS: Can I modify input? Extra space allowed? Optimize for time or space?
Top 10 Interview Patterns
Pattern 1: Two Pointers
def two_sum_sorted(numbers: list[int], target: int) -> list[int]:
left, right = 0, len(numbers) - 1
while left < right:
total = numbers[left] + numbers[right]
if total == target:
return [left + 1, right + 1]
elif total < target:
left += 1
else:
right -= 1
return []
Pattern 2: Sliding Window
def length_of_longest_substring(s: str) -> int:
char_index = {}
left = 0
max_len = 0
for right, char in enumerate(s):
if char in char_index and char_index[char] >= left:
left = char_index[char] + 1
char_index[char] = right
max_len = max(max_len, right - left + 1)
return max_len
Pattern 3: Fast and Slow Pointers
def detect_cycle(head):
slow = fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
if slow == fast:
slow = head
while slow != fast:
slow = slow.next
fast = fast.next
return slow
return None
Pattern 4: Binary Search Variants
def binary_search(nums: list[int], target: int) -> int:
lo, hi = 0, len(nums) - 1
while lo <= hi:
mid = lo + (hi - lo) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
lo = mid + 1
else:
hi = mid - 1
return -1
def first_occurrence(nums: list[int], target: int) -> int:
lo, hi = 0, len(nums) - 1
result = -1
while lo <= hi:
mid = lo + (hi - lo) // 2
if nums[mid] == target:
result = mid
hi = mid - 1
elif nums[mid] < target:
lo = mid + 1
else:
hi = mid - 1
return result
Pattern 5: BFS/DFS on Graphs and Trees
from collections import deque
def level_order(root) -> list[list[int]]:
if not root:
return []
result = []
queue = deque([root])
while queue:
level = []
for _ in range(len(queue)):
node = queue.popleft()
level.append(node.val)
if node.left: queue.append(node.left)
if node.right: queue.append(node.right)
result.append(level)
return result
def num_islands(grid: list[list[str]]) -> int:
if not grid:
return 0
rows, cols = len(grid), len(grid[0])
count = 0
def dfs(r, c):
if r < 0 or r >= rows or c < 0 or c >= cols or grid[r][c] == '0':
return
grid[r][c] = '0'
dfs(r+, c); dfs(r-, c); dfs(r, c+); dfs(r, c-)
r (rows):
c (cols):
grid[r][c] == :
count +=
dfs(r, c)
count
Pattern 6: Top K Elements
import heapq
from collections import Counter
def top_k_frequent(nums: list[int], k: int) -> list[int]:
count = Counter(nums)
return heapq.nlargest(k, count.keys(), key=count.get)
def find_kth_largest(nums: list[int], k: int) -> int:
heap = nums[:k]
heapq.heapify(heap)
for num in nums[k:]:
if num > heap[0]:
heapq.heapreplace(heap, num)
return heap[0]
Pattern 7: Dynamic Programming
def rob(nums: list[int]) -> int:
if not nums: return 0
if len(nums) <= 2: return max(nums)
prev2, prev1 = nums[0], max(nums[0], nums[1])
for i in range(2, len(nums)):
curr = max(prev1, prev2 + nums[i])
prev2, prev1 = prev1, curr
return prev1
Pattern 8: Monotonic Stack
def next_greater_element(nums: list[int]) -> list[int]:
n = len(nums)
result = [-1] * n
stack = []
for i in range(n):
while stack and nums[i] > nums[stack[-1]]:
result[stack.pop()] = nums[i]
stack.append(i)
return result
Pattern 9: Backtracking
def generate_parentheses(n: int) -> list[str]:
result = []
def backtrack(current, open_count, close_count):
if len(current) == 2 * n:
result.append(current)
return
if open_count < n:
backtrack(current + "(", open_count + 1, close_count)
if close_count < open_count:
backtrack(current + ")", open_count, close_count + 1)
backtrack("", 0, 0)
return result
Pattern 10: Prefix Sum
def subarray_sum(nums: list[int], k: int) -> int:
prefix_count = {0: 1}
current_sum = 0
count = 0
for num in nums:
current_sum += num
count += prefix_count.get(current_sum - k, 0)
prefix_count[current_sum] = prefix_count.get(current_sum, 0) + 1
return count
System Design Interview Framework
1. REQUIREMENTS (5 min)
Functional: What does the system do?
Non-functional: Scale, latency, availability, consistency
2. ESTIMATION (3 min)
Users: DAU, peak QPS
Storage: data size * retention
Bandwidth: QPS * average payload
3. HIGH-LEVEL DESIGN (10 min)
Draw main components, show data flow, identify APIs
4. DEEP DIVE (15 min)
Database schema, scaling bottlenecks, caching, consistency tradeoffs
5. WRAP UP (5 min)
Monitoring, error handling, future improvements
Key Concepts Quick Reference
| Concept | When to Use | Tradeoff |
|---|
| Load balancer | Multiple servers | Adds latency hop |
| Cache (Redis) | Frequent reads | Stale data, invalidation |
| CDN | Static assets | Cost, cache invalidation |
| Message queue | Async processing | Complexity, eventual consistency |
| Database sharding | Scale writes | Cross-shard queries harder |
| Read replicas | Scale reads | Replication lag |
| Rate limiting | Protect services | Legitimate users blocked |
Behavioral Interview Framework
STAR Method
S - Situation: Set context (1-2 sentences)
T - Task: Your specific responsibility
A - Action: What YOU did (use "I" not "we")
R - Result: Quantifiable outcome with metrics
Top Behavioral Questions by Category
LEADERSHIP: Led project with ambiguity, decided without complete info, disagreed with manager
PROBLEM SOLVING: Hardest bug debugged, simplified complex system, handled production incident
COLLABORATION: Worked with difficult teammate, cross-team project, code review disagreements
GROWTH: Technical mistake and lesson, staying current with tech, receiving critical feedback
Interview Day Tactics
45-minute coding interview breakdown:
0-5 min: Understand problem, ask questions
5-10 min: Discuss approach, get agreement
10-30 min: Code the solution
30-35 min: Test with examples, fix bugs
35-40 min: Discuss complexity, optimizations
40-45 min: Your questions for interviewer
THINK ALOUD CONSTANTLY:
"I'm thinking about using a hash map because..."
"The edge case here would be..."
WHEN STUCK:
"Let me think about this from a different angle..."
"What if I tried a simpler version first..."
Practice Schedule
| Week | Focus | Daily Practice |
|---|
| 1-2 | Arrays, Strings, Hash Maps | 3 easy, 1 medium |
| 3-4 | Linked Lists, Stacks, Queues | 2 easy, 2 medium |
| 5-6 | Trees, Graphs, BFS/DFS | 1 easy, 2 medium, 1 hard |
| 7-8 | Dynamic Programming | 2 medium, 1 hard |
| 9-10 | System Design | 2 problems + mock |
| 11 | Mock Interviews | 1 full mock per day |
| 12 | Review Weak Areas | Review notes, light practice |
Common Pitfalls
| Mistake | Fix |
|---|
| Jumping to code immediately | Always plan first, get agreement |
| Silent thinking | Think out loud constantly |
| Not asking clarifying questions | Ask 2-3 questions minimum |
| Ignoring edge cases | Check null, empty, single element |
| Over-engineering | Start simple, optimize if time permits |
| Not testing solution | Walk through with example before submitting |
| Memorizing solutions | Understand patterns, not specific solutions |
| Skipping behavioral prep | Prepare 6-8 STAR stories |
Exercises
- Pattern Drill: Solve one problem from each of the 10 patterns, timing yourself at 25 minutes per problem
- Mock Interview: Practice with a partner, alternating interviewer/candidate
- Complexity Drill: For 20 problems, state time and space complexity before looking at the solution
- System Design Practice: Design a URL shortener, chat system, and news feed in 35 minutes each
- STAR Stories: Write out 8 stories covering leadership, conflict, failure, and technical challenge
Process
- Gather information. Ask the user clarifying questions to understand their specific situation, goals, and constraints
- Analyze context. Review the information provided and identify key factors relevant to interview algorithm coach
- Develop recommendations. Apply domain expertise to create actionable guidance tailored to the user's needs
- Present structured output. Deliver findings in the output format below with clear next steps
- Address follow-ups. Answer additional questions and refine recommendations based on feedback
Output Format
## Interview Algorithm Coach Analysis
### Assessment
[Key findings and observations]
### Recommendations
1. [Primary recommendation]
2. [Secondary recommendation]
3. [Additional suggestions]
### Action Items
- [ ] [First action step]
- [ ] [Second action step]
- [ ] [Follow-up task]
Edge Cases
- Incomplete information: Ask clarifying questions before proceeding with recommendations
- Conflicting requirements: Prioritize the most critical constraint and note trade-offs
- Out of scope requests: Redirect to appropriate specialized skill or professional resource
- Beginner vs advanced: Adjust depth and terminology based on user's experience level
Example
Input: "Help me with interview algorithm coach for my current situation"
Output:
Based on your situation, here is a structured approach to interview algorithm coach:
- Assessment: Evaluate your current state and identify key areas for improvement
- Strategy: Develop a targeted plan based on best practices
- Implementation: Execute the plan with specific, measurable steps
- Review: Monitor progress and adjust as needed