首页 > 其他分享 >560. 和为 K 的子数组(前缀和解决子串问题)

560. 和为 K 的子数组(前缀和解决子串问题)

时间:2023-07-24 14:33:53浏览次数:29  
标签:子串 前缀 560 sum int mp 数组 ans

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


示例 1:

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

> 思路

  • 每个元素对应一个“前缀和”
  • 遍历数组,根据当前“前缀和”,在 map 中寻找「与之相减 == k」的历史前缀和
  • 当前“前缀和”与历史前缀和,差分出一个子数组,该历史前缀和出现过 c 次,就表示当前项找到 c 个子数组求和等于 k。
  • 遍历过程中,c 不断加给 ans,最后返回 ans

> 代码


class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        int sum = 0, ans = 0;
        unordered_map<int,int> mp;
        mp[0] = 1;
        for(int i: nums){
            //找所有的前缀和
            sum += i;
            if(mp.find(sum-k) != mp.end()) ans += mp[sum-k];
            mp[sum] ++;
        }
        return ans;
    }
};

标签:子串,前缀,560,sum,int,mp,数组,ans
From: https://www.cnblogs.com/lihaoxiang/p/17577138.html

相关文章

  • 前缀和
    在学完数组后常会遇见这样的题如B3612【深进1.例1】求区间和:有n个数,$a1,a2,a3.....an(ai<=105),m<=103$,$l$,$r$,求区间内的和;$n$个数:$2$$7$$9$$1$$3$$6$$5$$3$你会写出这样的代码:while(m--){ for(inti=起点;i<=终点;i++) sum+=a[i]; ...............抛开题......
  • 全局路由前缀配置
    1、新建RouteConventio.cs文件///<summary>///全局路由前缀配置///</summary>publicclassRouteConventio:IApplicationModelConvention{///<summary>///定义一个路由前缀变量///</summary>privatere......
  • 2-3 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀 0x 或 0X)转换为与
    ArchlinuxGCC13.1.1 202304292023-07-2219:48:23星期六 点击查看代码#include<stdio.h>#include<ctype.h>inthtoi(constchar*s);intmain(){chararr[4]="0x3A";intresult=htoi(arr);printf("%d\n",resu......
  • HJ75 公共子串计算
    1.题目读题 HJ75 公共子串计算 考查点 同  HJ65 查找两个字符串a,b中的最长公共子串HJ65查找两个字符串a,b中的最长公共子串2.解法思路 代码逻辑 具体实现 自行实现publicclassHJ075{publicstaticvoidmain(String[]args){Scanne......
  • HJ65 查找两个字符串a,b中的最长公共子串
    1.题目读题 HJ65 查找两个字符串a,b中的最长公共子串 考查点 2.解法思路 代码逻辑 具体实现自行实现 publicclassHJ065{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);System.out.println(dp(sc.n......
  • jsp 超链接带系统前缀
    如: <a href="www.iteye.com">iteye</a> 网页生成后点击此超链接,始终有如http://localhost:8080的前缀,变成http://localhost:8080/www.iteye.com  解决:加上http://前缀   <a href="http://www.iteye.com">iteye</a> ......
  • 9Java中如何判断一个字符串是否包含另一个子串
    在Java中,我们经常会遇到需要判断一个字符串是否包含另一个子串的情况。对于这个问题,我们可以使用一些简单而有效的方法来解决。本文将介绍几种常见的方法,以及它们的优缺点。方法一:使用contains方法Java中的String类提供了一个contains方法,可以很方便地判断一个字符串是否包含另......
  • PKUSC2018 最大前缀和
    这个期望显然是诈骗,即统计每种排列最大前缀和之和。对于某个排列\(a\),令\(s(l,r)=\sum\limits_{k=l}^ra_k\)。考虑前缀\([1,i]\)成为答案的充要条件:\(\forall1<j\lei,s(j,i)\ge0\),否则可以去掉这段。\(\forallj>i,s(i+1,j)<0\),否则加上这段不劣(钦定取的是最大并且最靠......
  • 代码随想录算法训练营第57天 | ● 647. 回文子串 ● 516.最长回文子序列 ● 动
     第九章 动态规划part17●  647. 回文子串  ●  516.最长回文子序列●  动态规划总结篇 今天 我们就要结束动态规划章节了,大家激不激动!!!   详细布置   647. 回文子串    动态规划解决的经典题目,如果没接触过的话,别硬想 直接看题解。https:......
  • java base64 去掉前缀
    JavaBase64去掉前缀的实现步骤在Java中,要去掉Base64编码的前缀,可以通过一系列的步骤来实现。下面是整个流程的步骤表格:步骤描述步骤1将Base64编码的字符串转换为字节数组步骤2使用Java提供的Base64解码类解码字节数组步骤3将解码后的字节数组转换为字符串......