当前位置:实例文章 » 其他实例» [文章]力扣热门100题之和为k的子数组【中等】

力扣热门100题之和为k的子数组【中等】

发布人:shili8 发布时间:2025-02-22 12:48 阅读次数:0

**力扣热门100题之和为k的子数组**

**难度:** 中等**描述:**

给定一个整数数组 `nums` 和一个目标值 `k`,找出所有和为 `k` 的子数组。返回这些子数组的起始索引。

**示例1:**

输入:`nums = [1,2,3], k =3`
输出:`[[0,1,2]]`

**示例2:**

输入:`nums = [1,2,-2,4], k =4`
输出:`[[1,2,-2],[3]]`

**示例3:**

输入:`nums = [-1, -2,1,2,3], k =3`
输出:`[[3]]`

**思路:**

本题要求找出所有和为 `k` 的子数组。我们可以使用前缀和的概念来解决这个问题。

首先,我们计算出数组中每个元素的前缀和。然后,我们遍历数组,检查是否存在一个前缀和等于 `k - nums[i]` 的前缀和。如果存在,则说明有一个子数组的和为 `k`。

**代码:**

class Solution:
 def subarraySum(self, nums: List[int], k: int) -> List[List[int]]:
 # 计算前缀和 prefix_sum = {0: -1}
 current_sum =0 result = []
 for i in range(len(nums)):
 current_sum += nums[i]
 # 检查是否存在一个前缀和等于 k - current_sum 的前缀和 if current_sum - k in prefix_sum:
 result.append([prefix_sum[current_sum - k] +1, i])
 # 更新前缀和表 if current_sum not in prefix_sum:
 prefix_sum[current_sum] = i return result


**注释:**

* `prefix_sum` 是一个字典,用于存储每个元素的前缀和及其对应的索引。
* `current_sum` 表示当前元素的前缀和。
* `result` 是一个列表,用于存储所有和为 `k` 的子数组的起始索引。

**时间复杂度:**

本题的时间复杂度为 O(n),其中 n 是数组的长度。我们只需要遍历数组一次即可找到所有和为 `k` 的子数组。

**空间复杂度:**

本题的空间复杂度为 O(n)。我们需要存储每个元素的前缀和及其对应的索引,因此空间复杂度为 O(n)。

以上就是力扣热门100题之和为k的子数组的解决方案。

其他信息

其他资源

Top