概述
1. 题目
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。
示例 1:
输入:nums = [1,1,1], k = 2
输出:2
示例 2:
输入:nums = [1,2,3], k = 3
输出:2
2. 题解
- 暴力解法(不推荐,这就没啥意思了)
func subarraySum(_ nums: [Int], _ k: Int) -> Int {
var count = 0
for start in 0..<nums.count {
var sum = 0
for end in start..<nums.count {
sum += nums[end]
if sum == k {
count += 1
}
}
}
return count
}
- 标准思路: 前缀和 + 哈希表
func subarraySum(_ nums: [Int], _ k: Int) -> Int {
// [1,2,2,1,3,4,5] k = 4
/**
和为4,也可以是前5个数组元素减去前3个数组元素
1,2,2,1,3
- 1,2,2
------------
4
(1) var dict: [Int: Int] = [0: 1] 代表的意思:
数组和为0的,存在1个,就是下标为0的前面,也就是没有元素的情况
(2) count += dict[sum - k]! 代表的意思:
总数量是 : 字典中符合情况的value的和
*/
var count = 0
var dict: [Int: Int] = [0: 1]
var sum = 0
for i in 0..<nums.count {
sum += nums[i]
if dict.keys.contains(sum - k) {
count += dict[sum - k]!
}
if let value = dict[sum] {
dict[sum] = value + 1
} else {
dict[sum] = 1
}
}
return count
}
最后
以上就是贪玩玉米为你收集整理的19 和为K的子数组的全部内容,希望文章能够帮你解决19 和为K的子数组所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复