首页 > 其他分享 >560.和为k的子数组

560.和为k的子数组

时间:2022-11-11 01:55:06浏览次数:41  
标签:pre count nums 560 number let mp 数组

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

示例 1:

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

示例 2:

输入:nums = [1,2,3], k = 3
输出:2
方法一:枚举
时间复杂度:O(n2)
空间复杂度:O(1)
 1 /**
 2  * @param {number[]} nums
 3  * @param {number} k
 4  * @return {number}
 5  */
 6 var subarraySum = function (nums, k) {
 7     let count = 0;
 8     for (let start = 0; start < nums.length; ++start) {
 9         let sum = 0;
10         for (let end = start; end >= 0; --end) {
11             sum += nums[end];
12             if (sum == k) {
13                 count++;
14             }
15         }
16     }
17     return count;
18 };
方法二:前缀和+哈希表优化
时间复杂度:O(n)
空间复杂度:O(n)
 1 /**
 2  * @param {number[]} nums
 3  * @param {number} k
 4  * @return {number}
 5  */
 6 var subarraySum = function(nums, k) {
 7     const mp = new Map();
 8     mp.set(0, 1);
 9     let count = 0,
10         pre = 0;
11     for (const x of nums) {
12         pre += x;
13         if (mp.has(pre - k)) {
14             count += mp.get(pre - k);
15         }
16         if (mp.has(pre)) {
17             mp.set(pre, mp.get(pre) + 1)
18         } else {
19             mp.set(pre, 1);
20         }
21     }
22     return count;
23 }

标签:pre,count,nums,560,number,let,mp,数组
From: https://www.cnblogs.com/icyyyy/p/16879378.html

相关文章

  • 力扣 81. 搜索旋转排序数组 II
    81.搜索旋转排序数组II已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0<=k<nums.leng......
  • 类内初始化数组
    1,问题:就是在类内定义了一个数组,但是我又不想用for循环一个个元素去初始化,于是我去网上寻找答案。2,网上大多数答案:在类内创建数组时选择static修饰,也就是将这个数组变为......
  • 941 有效的山脉数组
    题目941有效的山脉数组给定一个整数数组arr,如果它是有效的山脉数组就返回true,否则返回false。让我们回顾一下,如果arr满足下述条件,那么它是一个山脉数组:arr.leng......
  • 数组为函数参数
    1、数组引用作为函数形参,链接1)输入必须为10个元素!2)可以将数组定义为类型voidprint(int(&arr)[10]){for(autoi:arr){cout<<i<<endl;}}......
  • 不修改数组找出重复的数字
    14.不修改数组找出重复的数字题给定一个长度为n+1的数组nums,数组中所有的数均在1∼n的范围内,其中n≥1。请找出数组中任意一个重复的数,但不能修改输入的数组。数据......
  • 查找字符串数组中的最长公共前缀
     import java.util.*;public class Solution {    /**     *      * @param strs string字符串一维数组      * @return string......
  • 算法 Notes|LeetCode 26. 删除排序数组中的重复项 - easy
    历史LeetCode刷题文章:​​算法Notes|LeetCode349.两个数组的交集-easy​​​​算法Notes|LeetCode14.最长公共前缀-easy​​​​算法Notes|LeetCode1.两数之和......
  • java 如何删除数组的第一个元素,并且整体向前移动
    publicclassTest{publicstaticvoidmain(String[]args){int[]arr=newint[]{1,2,3,4,5,6};printArr(arr);arr=deleteF......
  • javaScript中的数组
    javaScript中的数组之前我们已经简单了解过数组了,现在我们开始详细的学习数组,数组就是存放一组数据的优雅变量创建数组的两种方法:let数组名=newArray()letarr=newA......
  • C# 数组拼接
    byte[]a={1,2,3};byte[]b={99,3,2,1,99};byte[]c={0,0};byte[]ab=a.Concat(b).Concat(c).ToArray();foreach(bytevinab){Console......