Welcome to the Array & Matrix template collection! These are ready-to-use Java snippets for the most common array patterns: two pointers, sliding window, prefix sum, binary search, and matrix operations. Each template is minimal enough to memorize yet complete enough to paste into a solution and adapt. See also Arrays & Strings and Search.
Arrays are the most common data structure in interviews. Most problems start with an array or can be reduced to one. Learning these patterns well — two pointers, sliding window, prefix sum, and binary search — covers roughly 40% of all LeetCode problems.
Summary
| Pattern | Signal Phrases | Key Idea |
|—|—|—|
| Two Pointers | “sorted array”, “pair sum”, “container” | Start/end pointers moving inward |
| Sliding Window | “substring”, “subarray of size k” | Expand right, shrink left |
| Prefix Sum | “range sum”, “subarray sum equals k” | Precompute cumulative sums |
| Binary Search | “sorted”, “find position” | Halve search space |
| Matrix | “rotate”, “spiral”, “transpose” | Index mapping |
When to use: The problem says “sorted array”, asks for a “pair with target sum”, mentions “container with most water”, or requires comparing elements from both ends.
// Maximum sum of subarray of size kstaticintmaxSumSubarray(int[]nums,intk){intsum=0;for(inti=0;i<k;++i){sum+=nums[i];}intmaxSum=sum;for(inti=k;i<nums.length;++i){sum=sum-nums[i-k]+nums[i];maxSum=Math.max(maxSum,sum);}returnmaxSum;}
Variable Size Window
// Longest subarray with sum <= kstaticintlongestSubarray(int[]nums,intk){intleft=0,sum=0,maxLen=0;for(intright=0;right<nums.length;++right){sum+=nums[right];while(sum>k){sum-=nums[left++];}maxLen=Math.max(maxLen,right-left+1);}returnmaxLen;}
int[]prefixSum(int[]a){int[]ps(a.size()+1);for(inti=0;i<(int)a.size();++i){ps[i+1]=ps[i]+a[i];}returnps;}// Range sum querystaticintrangeSum(int[]prefix,intl,intr){returnprefix[r+1]-prefix[l];}
Difference Array
// Range additionint[]getModifiedArray(intlength,int[][]updates){int[]diff=newint[length+1];for(intupdate:updates){diff[update[0]]+=update[2];diff[update[1]+1]-=update[2];}int[]result=newint[length];result[0]=diff[0];for(inti=1;i<length;++i){result[i]=result[i-1]+diff[i];}returnresult;}
staticintsearchRotated(int[]nums,inttarget){intleft=0,right=nums.length-1;while(left<=right){intmid=left+(right-left)/2;if(nums[mid]==target)returnmid;if(nums[left]<=nums[mid]){// Left half is sortedif(nums[left]<=target&&target<nums[mid]){right=mid-1;}else{left=mid+1;}}else{// Right half is sortedif(nums[mid]<target&&target<=nums[right]){left=mid+1;}else{right=mid-1;}}}return-1;}
// Jump Game II - Minimum jumpsstaticintjump(int[]nums){intn=nums.length;intjumps=0,curEnd=0,curFar=0;for(inti=0;i<n-1;++i){curFar=Math.max(curFar,i+nums[i]);if(i==curEnd){jumps++;curEnd=curFar;}}returnjumps;}