1.
Basic Programming & Data Structures
• Arrays (1D & 2D basics)
• Strings (basic operations, substring, character counts)
• Loops (for, while, nested)
• Conditional Statements (if-else, switch)
• HashMap / Dictionary usage for frequency/counting
2. Sorting and Searching
• Sorting basics (Arrays.sort, custom comparators)
• Binary Search (on sorted arrays, and binary search on answer pattern)
3. Two Pointers & Sliding Window
• Two pointers technique for array/string problems
• Sliding window for subarray/substrings problems
4. Prefix Sum & Frequency Count
• Prefix sums to quickly calculate sums in subarrays
• Frequency counting with HashMap/arrays for counting characters/elements
5. Basic Greedy Algorithms
• Simple greedy logic for optimization problems
6. Brute Force + Optimization
• Understand brute force approach
• Small optimizations to pass medium constraints
7. Simple Recursion
• Basic recursion patterns (factorial, fibonacci, subsets)
• Backtracking basics (optional, for partial 3rd problem)
8. Edge Case Handling & I/O
• Handling corner cases (empty arrays, single element, max/min values)
• Fast Input/Output in Java (Scanner, BufferedReader)
Bonus for Partial Third Problem (Harder)
• Dynamic Programming basics (top-down memoization)
• Binary Search on Answer (advanced searching)
• String/Array transformation patterns (like rearranging or substring rebuild)