Trapping Rain Water Problem LeetCode Java Solution
// SOLVING THIS WITH AN AI ASSISTANT (2026)
If you are working through this problem with an AI coding assistant — Claude, ChatGPT, Cursor chat, Gemini, GitHub Copilot, Aider, or any agent — the goal isn’t to ask for the answer. It is to use the tool to understand the pattern. The prompt sequence I’d run:
- Spec it back to me first. “In your own words, what is this problem actually testing? What’s the smallest example that fails the naive approach?”
- Brute-force first, optimize after. “Write the simplest correct solution, even if it’s O(n²). Don’t optimize. Just make it correct, with comments explaining each step.”
- Ask for the upgrade. “Now show me the optimal solution. What insight makes it possible? What pattern is this an instance of?”
- Stress-test it. “Generate 10 edge cases — empty input, single element, duplicates, max size, sorted, reverse-sorted. Run my solution against each.”
The pattern matters more than the answer. If the agent just hands you optimized code, you’ve trained yourself to lose interviews.
Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.
Example:
Input: [0,1,0,2,1,0,1,3,2,1,2,1] Output: 6
class Solution {
public int trap(int[] height) {
int arrLength = height.length;
int total = 0;
if(arrLength<=2) return total;
int[] leftMaxArr = new int[arrLength];
int[] rightMaxArr = new int[arrLength];
leftMaxArr = leftMax(leftMaxArr, height);
rightMaxArr = rightMax(rightMaxArr, height);
for(int i=0; i<arrLength; i++){
if(leftMaxArr[i]<=rightMaxArr[i] && leftMaxArr[i]>height[i]){
total = total + (leftMaxArr[i]-height[i]);
}else if(rightMaxArr[i]<leftMaxArr[i] && rightMaxArr[i]>height[i] ){
total = total + (rightMaxArr[i]-height[i]);
}
}
return total;
}
public int[] leftMax(int[] arr, int[] height){
int max = height[0];
for(int i =0;i<height.length;i++){
if(max>height[i]){
arr[i] = max;
}else{
arr[i] = height[i];
max = height[i];
}
}
return arr;
}
public int[] rightMax(int[] arr, int[] height){
int max = height[height.length-1];
for(int i =height.length-1;i>=0;i--){
if(max>height[i]){
arr[i] = max;
}else{
arr[i] = height[i];
max = height[i];
}
}
return arr;
}
}
Here is the video explanation
For the AI-native engineering side of HackerHeap — building MCP servers, comparing agents (Claude Code, Cursor, Windsurf, Codex, Gemini, Copilot), and weekly working code — see the Friday Build newsletter and the MCP archive.