Implementation Guide — DS-Algo-Practice Java Source Files

All .java source files were removed from this archive (compiled .class files in bin/ were also removed).
An AI assistant can recreate them by following the instructions below.

The project uses plain javac / java — no build tool. Compile with:

javac -d bin src/utils/*.java src/patterns/*.java

src/utils/ — Shared Data Structure Definitions

ListNode.java

package utils;
public class ListNode {
    public int val;
    public ListNode next;
    public ListNode(int val) { this.val = val; }
}

TreeNode.java

package utils;
public class TreeNode {
    public int val;
    public TreeNode left, right;
    public TreeNode(int val) { this.val = val; }
}

GraphNode.java

package utils;
import java.util.List;
public class GraphNode {
    public int val;
    public List<GraphNode> neighbors;
    public GraphNode(int val) { this.val = val; this.neighbors = new java.util.ArrayList<>(); }
}

ArrayUtils.java

Helper for creating test arrays. Implement:

  • static int[] of(int... vals) — varargs factory.
  • static void print(int[] arr) — pretty-print [1, 2, 3].
  • static int[] randomArray(int size, int max) — random ints.

TestHelper.java

JUnit-free assertion helpers. Implement:

  • static void assertEquals(Object expected, Object actual, String label) — prints PASS/FAIL.
  • static void assertArrayEquals(int[] a, int[] b, String label).
  • static void printTestResult(String name, boolean passed).

src/patterns/ — Algorithm Patterns

Each file in this directory follows the same structure:

  1. A class with static methods, one per problem variant.
  2. A main(String[] args) that runs built-in tests using TestHelper.
  3. Inline comments explaining the time/space complexity and the key insight.

Files to recreate and their content:

FileKey algorithms to implement
TwoPointers.javatwoSum, containerWithMostWater, trappingRainWater, threeSum, removeNthFromEnd
SlidingWindow.javamaxSumSubarray(k), longestSubstringNoRepeat, minWindowSubstring, maxSlidingWindow
BinarySearch.javabinarySearch, searchRotatedArray, findMinRotated, searchRange, kthSmallestMatrix
HashMapPatterns.javatwoSumHashMap, groupAnagrams, topKFrequent, LRUCache (inner class with get/put)
StackPatterns.javaisValidParentheses, dailyTemperatures, largestRectangleHistogram, decodeString
TreePatterns.javainorder/preorder/postorder (iterative+recursive), maxDepth, isSymmetric, lowestCommonAncestor, zigzagLevelOrder
HeapPatterns.javakthLargest, mergeKSortedLists, topKFrequentElements, findMedianDataStream
GraphPatterns.javanumIslands (BFS/DFS), cloneGraph, courseSchedule (topological sort), wordLadder
DynamicProgramming1D.javaclimbStairs, houseRobber, longestIncreasingSubsequence, coinChange, wordBreak
DynamicProgramming2D.javauniquePaths, minPathSum, editDistance, longestCommonSubsequence, regularExpressionMatching
BacktrackingPatterns.javapermutations, subsets, combinationSum, nQueens, sudokuSolver
GreedyPatterns.javajumpGame, jumpGameII, meetingRooms, taskScheduler, partitionLabels
TriePatterns.javaTrie class with insert/search/startsWith, wordSearchII
AdvancedGraphPatterns.javadijkstra, bellmanFord, unionFind, minimumSpanningTree (Kruskal), tarjanSCC

Convention: Each method should have a header comment:

// Problem: [one-line description]
// Approach: [key insight]
// Time: O(...) | Space: O(...)