Prefix Sum Basics¶
Table of Contents¶
- 303. Range Sum Query - Immutable (Easy)
- 3427. Sum of Variable Length Subarrays (Easy)
- 2559. Count Vowel Strings in Ranges (Medium)
- 3152. Special Array II (Medium)
- 1749. Maximum Absolute Sum of Any Subarray (Medium)
- 2389. Longest Subsequence With Limited Sum (Easy)
- 3361. Shift Distance Between Two Strings (Medium)
- 2055. Plates Between Candles (Medium)
- 1744. Can You Eat Your Favorite Candy on Your Favorite Day? (Medium)
- 53. Maximum Subarray (Medium)
- 1523. Count Odd Numbers in an Interval Range (Easy)
303. Range Sum Query - Immutable¶
-
LeetCode | LeetCode CH (Easy)
-
Tags: array, design, prefix sum
303. Range Sum Query - Immutable - Python Solution
from typing import List
# Prefix Sum
class NumArray:
def __init__(self, nums: List[int]):
n = len(nums)
self.ps = [0 for _ in range(n + 1)] # prefix sum
for i in range(1, n + 1):
self.ps[i] = self.ps[i - 1] + nums[i - 1]
def sumRange(self, left: int, right: int) -> int:
return self.ps[right + 1] - self.ps[left]
nums = [-2, 0, 3, -5, 2, -1]
obj = NumArray(nums)
assert obj.sumRange(0, 2) == 1
assert obj.sumRange(2, 5) == -1
assert obj.sumRange(0, 5) == -3
print("PASSED")
3427. Sum of Variable Length Subarrays¶
-
LeetCode | LeetCode CH (Easy)
-
Tags: array, prefix sum
2559. Count Vowel Strings in Ranges¶
-
LeetCode | LeetCode CH (Medium)
-
Tags: array, string, prefix sum
3152. Special Array II¶
-
LeetCode | LeetCode CH (Medium)
-
Tags: array, binary search, prefix sum
1749. Maximum Absolute Sum of Any Subarray¶
-
LeetCode | LeetCode CH (Medium)
-
Tags: array, dynamic programming
2389. Longest Subsequence With Limited Sum¶
-
LeetCode | LeetCode CH (Easy)
-
Tags: array, binary search, greedy, sorting, prefix sum
3361. Shift Distance Between Two Strings¶
-
LeetCode | LeetCode CH (Medium)
-
Tags: array, string, prefix sum
2055. Plates Between Candles¶
-
LeetCode | LeetCode CH (Medium)
-
Tags: array, string, binary search, prefix sum
1744. Can You Eat Your Favorite Candy on Your Favorite Day?¶
-
LeetCode | LeetCode CH (Medium)
-
Tags: array, prefix sum
53. Maximum Subarray¶
-
LeetCode | LeetCode CH (Medium)
-
Tags: array, divide and conquer, dynamic programming
53. Maximum Subarray - Python Solution
from typing import List
# DP Kadane
def maxSubArrayDP(nums: List[int]) -> int:
dp = [0 for _ in range(len(nums))]
dp[0] = nums[0]
maxSum = nums[0]
for i in range(1, len(nums)):
dp[i] = max(
dp[i - 1] + nums[i], # continue the previous subarray
nums[i], # start a new subarray
)
maxSum = max(maxSum, dp[i])
return maxSum
# Greedy
def maxSubArrayGreedy(nums: List[int]) -> int:
max_sum = nums[0]
cur_sum = 0
for num in nums:
cur_sum = max(cur_sum + num, num)
max_sum = max(max_sum, cur_sum)
return max_sum
# Prefix Sum
def maxSubArrayPrefixSum(nums: List[int]) -> int:
prefix_sum = 0
prefix_sum_min = 0
res = float("-inf")
for num in nums:
prefix_sum += num
res = max(res, prefix_sum - prefix_sum_min)
prefix_sum_min = min(prefix_sum_min, prefix_sum)
return res
nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
print(maxSubArrayDP(nums)) # 6
print(maxSubArrayGreedy(nums)) # 6
print(maxSubArrayPrefixSum(nums)) # 6
1523. Count Odd Numbers in an Interval Range¶
-
LeetCode | LeetCode CH (Easy)
-
Tags: math