Arrays Pattern Guide for LeetCode
1. Core Array Patterns
Template 1: Two Pointers
def two_pointers_template(arr):
left, right = 0, len(arr) - 1
while left < right:
# Process array elements
if CONDITION:
left += 1
else:
right -= 1
return result
# Variation: Fast and Slow Pointers
def fast_slow_template(arr):
slow = fast = 0
while fast < len(arr):
# Process array elements
slow += 1
fast += 2
Template 2: Sliding Window
def sliding_window_template(arr):
window = {} # or other data structure
left, right = 0, 0
result = 0
while right < len(arr):
# Add element to window
window[arr[right]] = window.get(arr[right], 0) + 1
while WINDOW_CONDITION_BROKEN:
# Remove element from window
window[arr[left]] -= 1
if window[arr[left]] == 0:
del window[arr[left]]
left += 1
# Update result
result = max(result, right - left + 1)
right += 1
return result
Template 3: Prefix Sum
def prefix_sum_template(arr):
prefix = [0] * (len(arr) + 1)
# Build prefix sum array
for i in range(len(arr)):
prefix[i + 1] = prefix[i] + arr[i]
# Query range sum: sum of arr[i:j]
def range_sum(i, j):
return prefix[j] - prefix[i]
2. LeetCode Problem Categories
Category 1: Two Sum Type Problems
- LeetCode 1: Two Sum
def twoSum(nums: List[int], target: int) -> List[int]:
seen = {}
for i, num in enumerate(nums):
complement = target - num
if complement in seen:
return [seen[complement], i]
seen[num] = i
return []
- LeetCode 15: 3Sum
def threeSum(nums: List[int]) -> List[List[int]]:
nums.sort()
result = []
for i in range(len(nums) - 2):
if i > 0 and nums[i] == nums[i-1]:
continue
left, right = i + 1, len(nums) - 1
while left < right:
total = nums[i] + nums[left] + nums[right]
if total < 0:
left += 1
elif total > 0:
right -= 1
else:
result.append([nums[i], nums[left], nums[right]])
while left < right and nums[left] == nums[left+1]:
left += 1
while left < right and nums[right] == nums[right-1]:
right -= 1
left += 1
right -= 1
return result
Category 2: Sliding Window Problems
- LeetCode 3: Longest Substring Without Repeating Characters
def lengthOfLongestSubstring(s: str) -> int:
chars = {}
left = right = 0
result = 0
while right < len(s):
if s[right] in chars:
left = max(left, chars[s[right]] + 1)
chars[s[right]] = right
result = max(result, right - left + 1)
right += 1
return result
Category 3: Kadane's Algorithm Problems
- LeetCode 53: Maximum Subarray
def maxSubArray(nums: List[int]) -> int:
current_sum = max_sum = nums[0]
for num in nums[1:]:
current_sum = max(num, current_sum + num)
max_sum = max(max_sum, current_sum)
return max_sum