Grind 75 is the customizable list its site describes as built by the author of Blind 75. At the default eight weeks and eight hours a week, the tool picks 75 questions from a pool of 169 and groups them by week, easy problems first and the hard ones last. Java costs more typing per problem than Python, but its collections cover every week, and a few classes, such as LinkedHashMap and TreeMap, turn some of the longer problems into a dozen lines. This page gives the default weeks with the Java APIs each one needs, the idioms that save time, the overflow and boxing traps on specific Grind problems, and how the plan changes with your hours. For the list itself, see our Grind 75 guide; for the same weeks in Python, Grind 75 in Python.
How the default plan is built
Each question in the pool has a time estimate from 15 to 45 minutes. The tool takes questions in priority order until your budget of weeks times hours runs out, counting each estimate at 1.96 times its value to leave room for review, then sorts the chosen questions by difficulty and fills one week at a time. At default settings that gives 24 easy, 42 medium and 9 hard questions, none of them Premium. Their estimates add up to 1,935 minutes, about 32 hours of solving, or about 63 hours once doubled for review. The tool accepts up to 26 weeks and 40 hours a week. Counts were read from each list's own site data on November 12, 2026. Lists are edited from time to time, so numbers can drift. The weekly groups below are our reproduction of the tool's logic at default settings.
The default weeks with the Java you need
| Week | Questions | Java APIs that help |
|---|---|---|
| 1 | 13 easy: Two Sum, Valid Parentheses, Merge Two Sorted Lists, Best Time to Buy and Sell Stock, Valid Palindrome, Invert Binary Tree, Valid Anagram, Binary Search, Flood Fill, LCA of a BST, Balanced Binary Tree, Linked List Cycle, Implement Queue using Stacks | HashMap<Integer, Integer>, ArrayDeque<Character> as the stack, Character.isLetterOrDigit, int[26] counts, two ArrayDeque<Integer> for the queue |
| 2 | 11 easy and 1 medium: First Bad Version, Ransom Note, Climbing Stairs, Longest Palindrome, Reverse Linked List, Majority Element, Add Binary, Diameter of Binary Tree, Middle of the Linked List, Maximum Depth, Contains Duplicate, Maximum Subarray | lo + (hi - lo) / 2, int[128], StringBuilder plus reverse(), HashSet.add returning false, an int field for the diameter |
| 3 | 8 medium: Insert Interval, 01 Matrix, K Closest Points to Origin, Longest Substring Without Repeating Characters, 3Sum, Level Order Traversal, Clone Graph, Evaluate Reverse Polish Notation | List<int[]> then toArray(new int[0][]), ArrayDeque<int[]> multi-source BFS, a size-k PriorityQueue<int[]>, List.of(a, b, c), queue.size() per level, HashMap<Node, Node> |
| 4 | 8 medium: Course Schedule, Implement Trie, Coin Change, Product of Array Except Self, Min Stack, Validate BST, Number of Islands, Rotting Oranges | List<List<Integer>> plus int[] indegree, Node[] next = new Node[26], Arrays.fill(dp, amount + 1), ArrayDeque<int[]> of {value, min}, char[][] compared with '1' |
| 5 | 8 medium: Search in Rotated Sorted Array, Combination Sum, Permutations, Merge Intervals, LCA of a Binary Tree, Time Based Key-Value Store, Accounts Merge, Sort Colors | List<Integer> path with removeLast(), boolean[] used, getLast(), TreeMap.floorEntry, union-find over HashMap<String, String> with TreeSet output |
| 6 | 9 medium: Word Break, Partition Equal Subset Sum, String to Integer (atoi), Spiral Matrix, Subsets, Right Side View, Longest Palindromic Substring, Unique Paths, Construct Tree from Preorder and Inorder | s.startsWith(w, i), boolean[] dp filled backwards, an overflow check before each multiply, int[] DP row, HashMap<Integer, Integer> of inorder indexes |
| 7 | 7 medium: Container With Most Water, Letter Combinations, Word Search, Find All Anagrams, Minimum Height Trees, Task Scheduler, LRU Cache | StringBuilder.setLength, in-place char[][] marks, Arrays.equals on two int[26], a degree array with leaf trimming, LinkedHashMap in access order |
| 8 | 9 hard and 1 medium: Kth Smallest in a BST, Minimum Window Substring, Serialize and Deserialize Binary Tree, Trapping Rain Water, Find Median from Data Stream, Word Ladder, Basic Calculator, Maximum Profit in Job Scheduling, Merge k Sorted Lists, Largest Rectangle in Histogram | ArrayDeque<TreeNode>, int[128] needs, split(",") with an index, two PriorityQueues, char[] edits on a HashSet<String>, a stack of signs, int[][] jobs sorted by end, Comparator.comparingInt, an int[] stack |
Idioms that cut typing
- LRU Cache: extend
LinkedHashMap<Integer, Integer>, callsuper(capacity, 0.75f, true)so iteration follows access order, and overrideremoveEldestEntryto returnsize() > capacity. Say it out loud, then be ready to build the doubly linked list if the interviewer asks. - Time Based Key-Value Store:
Map<String, TreeMap<Integer, String>>;getcallsfloorEntry(timestamp)and returns an empty string when it is null. - Accounts Merge: union-find over email strings, then a
TreeSet<String>per component, because the output needs each account's emails sorted. - Contains Duplicate:
if (!seen.add(x)) return true;;addalready reports whether the value was new. - Merge Intervals:
merged.getLast()[1] = Math.max(merged.getLast()[1], cur[1]);.getLastandremoveLaston lists arrived in Java 21; LeetCode runs OpenJDK 25, as LeetCode's help page on language environments listed it on November 12, 2026, but older editors needget(size() - 1). - Merge k Sorted Lists:
new PriorityQueue<ListNode>(Comparator.comparingInt(n -> n.val))is shorter than a lambda and cannot overflow. - Implement Queue using Stacks: use
ArrayDequerather thanStack, a legacy synchronized class whose own documentation points toDeque.
Overflow and boxing traps on Grind problems
- First Bad Version: n can be 2 to the power 31 minus 1, so
(lo + hi) / 2overflows into a negative index. Writelo + (hi - lo) / 2or(lo + hi) >>> 1. - String to Integer (atoi): before
result = result * 10 + d, checkresult > (Integer.MAX_VALUE - d) / 10and clamp; or accumulate in a long and stop as soon as it passes the limit. - Evaluate Reverse Polish Notation: Java's
/already truncates toward zero, which is what the problem wants, andInteger.parseInthandles negative tokens. This is one problem where Java needs less care than Python. - Combination Sum, Subsets and Permutations: on a
List<Integer>,path.remove(x)with an int argument removes by index, not by value. Undo the last choice withpath.remove(path.size() - 1)orremoveLast(). - Find All Anagrams in a String: comparing two
Integercounts with==compares objects, which only works for values from -128 to 127 because of Java's Integer cache. Compareint[26]windows withArrays.equals. - Maximum Profit in Job Scheduling:
Arrays.sorttakes no comparator for anint[], so sort anint[][]of {start, end, profit} rows by end. The total stays below 2 to the power 31 at LeetCode's limits, at most 50,000 jobs of at most 10,000 profit each, so int is enough here. - Find Median from Data Stream: values are within 100,000 of zero, so
(lo.peek() + hi.peek()) / 2.0is safe, and the2.0forces floating-point division. - Largest Rectangle in Histogram: an
ArrayDeque<Integer>boxes every index; anint[]stack with a top pointer is faster and just as short.
Fitting the plan to your hours
Running the tool's selection rule on other settings gives these sizes:
| Setting | Questions | Easy / Medium / Hard | Premium |
|---|---|---|---|
| 2 weeks at 10 hours | 27 | 15 / 12 / 0 | 0 |
| 3 weeks at 12 hours | 45 | 18 / 23 / 4 | 0 |
| 5 weeks at 12 hours | 71 | 24 / 38 / 9 | 0 |
| 10 weeks at 6 hours | 71 | 24 / 38 / 9 | 0 |
| 12 weeks at 12 hours | 164 | 41 / 102 / 21 | 12 |
| 16 weeks at 10 hours | 169, the full pool | 41 / 102 / 26 | 12 |
The tool's time estimates are the same for every language. If Java takes you longer to type than they assume, enter a little less than your real hours so the plan fits. The 12 Premium questions, such as Meeting Rooms, Graph Valid Tree and Alien Dictionary, only appear in long plans, described in our Grind 169 guide. If you already finished Blind 75 in Java, 40 of the default 75 will be repeats, by our count.
Turning a list into interview skill
Any list only helps if the practice transfers to problems you have not seen. These habits make the difference:
- Time-box every attempt: about 25 minutes for a medium before you read a solution.
- Keep a log with one line per problem: the pattern, the key idea and the complexity.
- Redo failed problems after three days, a week and three weeks, without looking at your old code.
- Explain your approach out loud before and while you code, as you would to an interviewer.
- In the last two weeks, switch to unseen problems without topic labels.
The patterns most lists are built on are explained in array and string patterns and tree, graph and recursion patterns.
Where CoPilot Interview fits
Finishing a list is not the same as passing an interview: interviewers score how you explain your approach, your trade-offs and your complexity out loud. CoPilot Interview is an AI interview assistant; its free AI mock interview asks coding questions, listens to your spoken explanation and scores it out of ten with a model answer, which is the part a problem list cannot train. The free plan gives 15 minutes a day of live help in sessions of up to 15 minutes, with AI mock interviews included. Online assessments and live coding rounds usually forbid outside help, so practice now and follow your employer's rules on the day.
Disclosure: CoPilot Interview is our product, so weigh what we say about it accordingly.
Frequently asked questions
Is Java a good language for Grind 75?
Yes. Solutions are longer than in Python, but Java's collections cover every week, and classes such as LinkedHashMap and TreeMap shorten LRU Cache and Time Based Key-Value Store.
What is the quickest way to write LRU Cache in Java?
Extend LinkedHashMap with access order turned on and override removeEldestEntry to drop the oldest entry when the size passes the capacity. Interviewers may still ask for the hand-built doubly linked list.
Why does my First Bad Version fail in Java?
n can be as large as 2^31 - 1, so (lo + hi) / 2 overflows. Use lo + (hi - lo) / 2 or (lo + hi) >>> 1.
How many hours does Grind 75 take?
The default plan budgets 64 hours, eight weeks at eight hours. The tool's own solve estimates add up to about 32 hours, which it doubles to leave time for review.
Practice this interview before the real one
The AI mock interview builds questions from your resume and the job description, reads them aloud and scores each spoken answer out of 10. Included on the free plan.
Start a mock interview