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:
- A class with
staticmethods, one per problem variant. - A
main(String[] args)that runs built-in tests usingTestHelper. - Inline comments explaining the time/space complexity and the key insight.
Files to recreate and their content:
| File | Key algorithms to implement |
|---|---|
TwoPointers.java | twoSum, containerWithMostWater, trappingRainWater, threeSum, removeNthFromEnd |
SlidingWindow.java | maxSumSubarray(k), longestSubstringNoRepeat, minWindowSubstring, maxSlidingWindow |
BinarySearch.java | binarySearch, searchRotatedArray, findMinRotated, searchRange, kthSmallestMatrix |
HashMapPatterns.java | twoSumHashMap, groupAnagrams, topKFrequent, LRUCache (inner class with get/put) |
StackPatterns.java | isValidParentheses, dailyTemperatures, largestRectangleHistogram, decodeString |
TreePatterns.java | inorder/preorder/postorder (iterative+recursive), maxDepth, isSymmetric, lowestCommonAncestor, zigzagLevelOrder |
HeapPatterns.java | kthLargest, mergeKSortedLists, topKFrequentElements, findMedianDataStream |
GraphPatterns.java | numIslands (BFS/DFS), cloneGraph, courseSchedule (topological sort), wordLadder |
DynamicProgramming1D.java | climbStairs, houseRobber, longestIncreasingSubsequence, coinChange, wordBreak |
DynamicProgramming2D.java | uniquePaths, minPathSum, editDistance, longestCommonSubsequence, regularExpressionMatching |
BacktrackingPatterns.java | permutations, subsets, combinationSum, nQueens, sudokuSolver |
GreedyPatterns.java | jumpGame, jumpGameII, meetingRooms, taskScheduler, partitionLabels |
TriePatterns.java | Trie class with insert/search/startsWith, wordSearchII |
AdvancedGraphPatterns.java | dijkstra, bellmanFord, unionFind, minimumSpanningTree (Kruskal), tarjanSCC |
Convention: Each method should have a header comment:
// Problem: [one-line description]
// Approach: [key insight]
// Time: O(...) | Space: O(...)