三指针尺取法
双指针尺取法只能维护单一区间的答案,有时我们需要维护两个区间的答案,这时候就需要三指针尺取法。
通常来说,用一个指针代表共用的区间右端点,另外两个区间分别表示两个区间左端点。
例题
class Solution
{
public:
int numSubarraysWithSum(vector<int> &nums, int goal)
{
int l1 = 0, l2 = 0, r = 0;
int lpsum1 = 0, lpsum2 = 0, rpsum = 0;
int ans = 0;
while (r < nums.size())
{
rpsum += nums[r];
while (l1 <= r && rpsum - lpsum1 > goal)
{
lpsum1 += nums[l1++];
}
while (l2 <= r && rpsum - lpsum2 >= goal)
{
lpsum2 += nums[l2++];
}
ans += l2 - l1;
r++;
}
return ans;
}
};