我们可以使用双指针法来解决这个问题。首先,我们可以将数组 b 的前缀和记录下来。然后,我们可以使用两个指针分别指向数组 b 的第一个元素和最后一个元素,同时维护当前连续子数组的和。如果当前连续子数组的和小于 a 的和,则右指针向右移动,否则左指针向右移动。每次移动指针之后,我们都可以用当前连续子数组的和与 a 的和进行比较,更新答案。这样的时间复杂度是 O(n),其中 n 是数组 b 的长度。
代码如下:
def closest_subarray(a: List[int], b: List[int]) -> Tuple[int, int]:
n = len(b)