首页 > 其他分享 >【前缀和】560. 和为 K 的子数组

【前缀和】560. 和为 K 的子数组

时间:2022-10-24 23:44:40浏览次数:51  
标签:pre 前缀 nums 560 int 数组 cur

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。

 

示例 1:

输入:nums = [1,1,1], k = 2
输出:2
示例 2:

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


 

思路:前缀和

前缀和定义:定义前缀和数组pre, 使得pre[i] 为 nums[0],  ...  , nums[i]  的所有数的和,  pre[i]  可以从pre[i-1]  得到, 即 pre[i] = pre[i-1] + nums[i]

 

 

 1 from collections import defaultdict
 2 class Solution:
 3     def subarraySum(self, nums: List[int], k: int) -> int:
 4         pre = defaultdict(int)   # 记录前缀和出现的次数
 5         pre[0] = 1  # 前缀和为0的出现1次
 6         ans = 0
 7         cur = 0    # 记录前缀和   
 8         for num in nums:
 9             cur += num
10             if cur - k in pre:   # 由于使用的是 defaultdict(int),字典中不存在key时,默认值为0,此if 可以省略。
11                 ans += pre[cur-k]
12             pre[cur] += 1
13         return ans

 

标签:pre,前缀,nums,560,int,数组,cur
From: https://www.cnblogs.com/wangpengcufe/p/16823486.html

相关文章

  • 数组方法的一些总结
    数组方法总结Push方法:添加一个新元素到数组尾部,并返回修改后数组的长度;letarr1=[1,2,3,4,5,6,7,8,9]this.arr1.push("A")console.log(this.arr1)//1,2,3,4,5,6,7,8,......
  • 实验3 数组、指针与现代C++标准库
    实验任务5:info.hpp:#include<iostream>#include<string>usingnamespacestd;classinfo{public:info(stringni,stringco,stringci,intn);voidpri......
  • 【luogu ARC106E】Medals(二分)(高维前缀和)
    Medals题目链接:luoguARC106E题目大意有n个第i个人的出现规律是对于所有2aik+1~2ai(k+1)的区间,2aik+1~2aik+ai会出现,另一部分则会不见。每个时间点你可以选择一......
  • JAVA-数组元素动态初始化
    packagecom.itheima;publicclassshuzu02{publicstaticvoidmain(String[]args){//格式:数据类型[]变量名=new数据类型[数组长度]int[......
  • C语言学习--指针和数组、const修饰指针
    数组名:【数组名是地址常量】--不可以被修改#include<stdio.h>intmain(void){inta[3]={1,2,3};//a是数组名,数组名是地址常量,不能被修改intb[3];......
  • 利用一个字符数组作函数参数,实现字符串(最大长度为80个字符 )的逆序存放。
    利用一个字符数组作函数参数,实现字符串(最大长度为80个字符)的逆序存放。要求如下:(1)在子函数Inverse中实现字符串的逆序存放。函数原型为:voidInverse(charstr[]);(2......
  • 915. 分割数组
    题目描述给一个数组nums,需要把他换分为两个连续的子数组,要求是两个子数组非空,且左边的每个元素都小于等于右边每个元素,左边数组长度尽可能小求left的长度f1-模拟+2次遍......
  • Leetcode第915题:分割数组(Partrition Array Into Disjoint Intervals)
    解题思路最终的是将一个数组分为两个数组:左数组和右数组。这两个数组满足:左数组的最大值小于右数组的任何值。需要一个变量left_max来记录左数组的最大值。左数组长度......
  • 915. 分割数组
    915.分割数组给定一个数组 nums ,将其划分为两个连续子数left 和 right, 使得:left 中的每个元素都小于或等于 right 中的每个元素。left和 right 都是非空......
  • 【算法】喜欢算法的朋友,看下乘积最大数组如何写?
    算法题目描述1.数组排序,类型:图算法,简单。2.下一个排列,类型:数组,双指针,中等难度。3.乘积最大数组,类型,数组,中等难度。第一道数组排序算法题目详细描述编写一个JavaAppl......