package
0.0.0-20241220224003-b7cf03a90b2b
Repository: https://github.com/szhou12/leetcode-go.git
Documentation: pkg.go.dev
# README
1918. Kth Smallest Subarray Sum
Locked Question
Solution idea
Binary Search - Guess k-th element + Two Pointers
- Key 转化思想: subarray sum = prefix-sum diff
e.g. sum[i:j]
as the subarray sum for nums
from i
to j
(左闭右闭)
sum[i:j] = prefixSum[j] - prefixSum[i-1]
-
prefix-sum 的特性: non-decreasing order $\Rightarrow $ 这个特性使得可以用 two-pointers
-
为什么 prefix-sum array 要比
nums
length + 1?- 方便计算
i=0
为start的 subarray sum. 也就是说, 否则计算diff时,无法包括前缀是nums
第一个元素的diff - e.g.
sum[0:2] = prefixSum[2] - prefixSum[0-1] = prefixSum[2] - prefixSum[-1]
所以prefixSum
在头部多垫一个格子放0, 使得nums[i]
对应prefixSum[i+1]
so thatsum[i:j] = prefixSum[j+1] - prefixSum[i+1-1] = prefixSum[j+1] - prefixSum[i]
- 方便计算
-
prefix-sum array例子:
nums = [2, 1, 3]
prefixSum = [0, 2, 3, 6]
sum[0:2] = 2+1+3 = 6 = prefixSum[3] - prefixSum[1-1] = prefixSum[3] - prefixSum[0]
Time complexity = $O(n\log D)$ where $D = $ difference between the largest subarray sum of nums
- smallest subarray sum of nums