<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: RHODY FF</title>
    <description>The latest articles on DEV Community by RHODY FF (@rhody_ff_a7c7f943064f1f88).</description>
    <link>https://dev.to/rhody_ff_a7c7f943064f1f88</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3688735%2F81197b01-3880-4a67-8497-665f248c8a54.jpg</url>
      <title>DEV Community: RHODY FF</title>
      <link>https://dev.to/rhody_ff_a7c7f943064f1f88</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rhody_ff_a7c7f943064f1f88"/>
    <language>en</language>
    <item>
      <title>23 DSA Patterns That Cover 90% of Coding Interview Questions</title>
      <dc:creator>RHODY FF</dc:creator>
      <pubDate>Thu, 01 Jan 2026 17:54:35 +0000</pubDate>
      <link>https://dev.to/rhody_ff_a7c7f943064f1f88/23-dsa-patterns-that-cover-90-of-coding-interview-questions-3748</link>
      <guid>https://dev.to/rhody_ff_a7c7f943064f1f88/23-dsa-patterns-that-cover-90-of-coding-interview-questions-3748</guid>
      <description>&lt;p&gt;The Problem with LeetCode Grinding&lt;/p&gt;

&lt;p&gt;Let me guess your DSA preparation strategy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open LeetCode&lt;/li&gt;
&lt;li&gt;Sort by "Most Liked"&lt;/li&gt;
&lt;li&gt;Solve random problems&lt;/li&gt;
&lt;li&gt;Repeat until placement season&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result? 500+ problems solved, yet freezing in interviews because you can't recognize the pattern.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://www.wcode.in/" rel="noopener noreferrer"&gt;W Code&lt;/a&gt; to fix this. Today, I'm sharing the pattern framework that has helped students crack TCS, Infosys, and FAANG interviews.&lt;/p&gt;

&lt;p&gt;The 23 Core DSA Patterns&lt;/p&gt;

&lt;p&gt;Array Patterns&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Two Pointers&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Example: Two Sum (Sorted Array)
&lt;/h1&gt;

&lt;p&gt;def two_sum(arr, target):&lt;br&gt;
    left, right = 0, len(arr) - 1&lt;br&gt;
    while left &amp;lt; right:&lt;br&gt;
        curr_sum = arr[left] + arr[right]&lt;br&gt;
        if curr_sum == target:&lt;br&gt;
            return [left, right]&lt;br&gt;
        elif curr_sum &amp;lt; target:&lt;br&gt;
            left += 1&lt;br&gt;
        else:&lt;br&gt;
            right -= 1&lt;br&gt;
    return [-1, -1]&lt;/p&gt;

&lt;p&gt;Use when: Finding pairs, removing duplicates, container with most water&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sliding Window&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Example: Maximum Sum Subarray of Size K
&lt;/h1&gt;

&lt;p&gt;def max_sum_subarray(arr, k):&lt;br&gt;
    window_sum = sum(arr[:k])&lt;br&gt;
    max_sum = window_sum&lt;br&gt;
    for i in range(k, len(arr)):&lt;br&gt;
        window_sum += arr[i] - arr[i - k]&lt;br&gt;
        max_sum = max(max_sum, window_sum)&lt;br&gt;
    return max_sum&lt;/p&gt;

&lt;p&gt;Use when: Subarrays of fixed/variable size, longest substring problems&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Prefix Sum&lt;br&gt;
Use when: Range sum queries, subarray sum equals K&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kadane's Algorithm&lt;br&gt;
Use when: Maximum subarray sum&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🔗 Linked List Patterns&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fast &amp;amp; Slow Pointers&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Example: Detect Cycle
&lt;/h1&gt;

&lt;p&gt;def has_cycle(head):&lt;br&gt;
    slow = fast = head&lt;br&gt;
    while fast and fast.next:&lt;br&gt;
        slow = slow.next&lt;br&gt;
        fast = fast.next.next&lt;br&gt;
        if slow == fast:&lt;br&gt;
            return True&lt;br&gt;
    return False&lt;/p&gt;

&lt;p&gt;Use when: Cycle detection, middle of linked list, nth from end&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reverse Linked List
Use when: Palindrome check, reverse in groups&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🌲 Tree Patterns&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;BFS (Level Order)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;from collections import deque&lt;/p&gt;

&lt;p&gt;def level_order(root):&lt;br&gt;
    if not root:&lt;br&gt;
        return []&lt;br&gt;
    result = []&lt;br&gt;
    queue = deque([root])&lt;br&gt;
    while queue:&lt;br&gt;
        level = []&lt;br&gt;
        for _ in range(len(queue)):&lt;br&gt;
            node = queue.popleft()&lt;br&gt;
            level.append(node.val)&lt;br&gt;
            if node.left:&lt;br&gt;
                queue.append(node.left)&lt;br&gt;
            if node.right:&lt;br&gt;
                queue.append(node.right)&lt;br&gt;
        result.append(level)&lt;br&gt;
    return result&lt;/p&gt;

&lt;p&gt;Use when: Level-by-level traversal, zigzag, right view&lt;/p&gt;

&lt;p&gt;8.DFS (Recursive)&lt;br&gt;
Use when: Path sum, validate BST, diameter&lt;/p&gt;

&lt;p&gt;9.Binary Search on BST&lt;br&gt;
Use when: Search, insert, delete, kth smallest&lt;/p&gt;

&lt;p&gt;GRAPH PATTERNS&lt;/p&gt;

&lt;p&gt;10.BFS on Graph&lt;br&gt;
Use when: Shortest path (unweighted), connected components&lt;/p&gt;

&lt;p&gt;11.DFS on Graph&lt;br&gt;
Use when: Cycle detection, connected components&lt;/p&gt;

&lt;p&gt;12.Topological Sort&lt;/p&gt;

&lt;p&gt;Python logic (Kahn’s Algorithm):&lt;/p&gt;

&lt;p&gt;from collections import deque, defaultdict&lt;/p&gt;

&lt;p&gt;def topological_sort(n, edges):&lt;br&gt;
    graph = defaultdict(list)&lt;br&gt;
    in_degree = [0] * n&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for u, v in edges:
    graph[u].append(v)
    in_degree[v] += 1

queue = deque([i for i in range(n) if in_degree[i] == 0])
result = []

while queue:
    node = queue.popleft()
    result.append(node)
    for neighbor in graph[node]:
        in_degree[neighbor] -= 1
        if in_degree[neighbor] == 0:
            queue.append(neighbor)

return result if len(result) == n else []
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Use when: Course schedule, task ordering, dependency resolution&lt;/p&gt;

&lt;p&gt;13.Union-Find (DSU)&lt;br&gt;
Use when: Connected components, cycle detection in undirected graph&lt;/p&gt;

&lt;p&gt;14.Dijkstra’s Algorithm&lt;br&gt;
Use when: Shortest path (weighted)&lt;/p&gt;

&lt;p&gt;DYNAMIC PROGRAMMING PATTERNS&lt;/p&gt;

&lt;p&gt;15.1D DP&lt;/p&gt;

&lt;p&gt;Example: Climbing Stairs&lt;/p&gt;

&lt;p&gt;def climb_stairs(n):&lt;br&gt;
    if n &amp;lt;= 2:&lt;br&gt;
        return n&lt;br&gt;
    dp = [0] * (n + 1)&lt;br&gt;
    dp[1], dp[2] = 1, 2&lt;br&gt;
    for i in range(3, n + 1):&lt;br&gt;
        dp[i] = dp[i-1] + dp[i-2]&lt;br&gt;
    return dp[n]&lt;/p&gt;

&lt;p&gt;Use when: House robber, fibonacci variants, coin change (minimum)&lt;/p&gt;

&lt;p&gt;16.2D DP&lt;br&gt;
Use when: Grid paths, longest common subsequence, edit distance&lt;/p&gt;

&lt;p&gt;17.0/1 Knapsack&lt;br&gt;
Use when: Subset sum, partition equal sum, target sum&lt;/p&gt;

&lt;p&gt;18.Unbounded Knapsack&lt;br&gt;
Use when: Coin change (number of ways), rod cutting&lt;/p&gt;

&lt;p&gt;19.LCS / LIS Patterns&lt;br&gt;
Use when: Longest increasing subsequence, longest common substring&lt;/p&gt;

&lt;p&gt;OTHER ESSENTIAL PATTERNS&lt;/p&gt;

&lt;p&gt;Binary Search&lt;br&gt;
Use when: Search in O(log n), search in rotated array&lt;/p&gt;

&lt;p&gt;Backtracking&lt;/p&gt;

&lt;p&gt;Example: Permutations&lt;/p&gt;

&lt;p&gt;def permute(nums):&lt;br&gt;
    result = []&lt;br&gt;
    def backtrack(path, remaining):&lt;br&gt;
        if not remaining:&lt;br&gt;
            result.append(path[:])&lt;br&gt;
            return&lt;br&gt;
        for i, num in enumerate(remaining):&lt;br&gt;
            path.append(num)&lt;br&gt;
            backtrack(path, remaining[:i] + remaining[i+1:])&lt;br&gt;
            path.pop()&lt;br&gt;
    backtrack([], nums)&lt;br&gt;
    return result&lt;/p&gt;

&lt;p&gt;Use when: Permutations, combinations, N-Queens, Sudoku&lt;/p&gt;

&lt;p&gt;Monotonic Stack&lt;br&gt;
Use when: Next greater element, largest rectangle in histogram&lt;/p&gt;

&lt;p&gt;Trie (Prefix Tree)&lt;br&gt;
Use when: Autocomplete, word search, prefix matching&lt;/p&gt;

&lt;p&gt;PATTERN RECOGNITION CHEAT SHEET&lt;/p&gt;

&lt;p&gt;If the problem says… → Think about…&lt;/p&gt;

&lt;p&gt;Subarray of size K → Sliding Window&lt;br&gt;
Pairs that sum to → Two Pointers&lt;br&gt;
Detect cycle → Fast &amp;amp; Slow Pointers&lt;br&gt;
Level by level → BFS&lt;br&gt;
All paths → DFS / Backtracking&lt;br&gt;
Order of completion → Topological Sort&lt;br&gt;
Maximum / Minimum → Dynamic Programming&lt;br&gt;
Next greater / smaller → Monotonic Stack&lt;br&gt;
Prefix matching → Trie&lt;/p&gt;

&lt;p&gt;START PRACTICING PATTERN-BASED&lt;/p&gt;

&lt;p&gt;I’ve organized 223+ problems by these patterns at W Code:&lt;br&gt;
&lt;a href="https://wcode.in" rel="noopener noreferrer"&gt;WCode&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Free forever (200+ problems)&lt;br&gt;
• TCS / Infosys / FAANG tracks&lt;br&gt;
• Interactive visualizers&lt;br&gt;
• AI resume analyzer&lt;/p&gt;

&lt;p&gt;Pattern-based DSA for Indian placements.&lt;/p&gt;

</description>
      <category>dsa</category>
      <category>coding</category>
      <category>algorithms</category>
      <category>interview</category>
    </item>
  </channel>
</rss>
