首页 > 其他分享 >LeetCode 热题 100 之 560. 和为 K 的子数组.md

LeetCode 热题 100 之 560. 和为 K 的子数组.md

时间:2023-07-24 21:56:44浏览次数:27  
标签:pre md nums 560 int 数组 presum 热题 preSum

题目

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

示例 1:

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

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

提示:

1 <= nums.length <= 2 * 10^4
-1000 <= nums[i] <= 1000
-10^7 <= k <= 10^7

思路

一:暴力解法:双层循环,超时

二:前缀和:超时

三:前缀和化+字典

前缀和可知,pre[i]=pre[i-1]+nums[i]
由j与i之间的子数组和为k 这个条件可以转化为 pre[i]-pre[j-1]=k简单移项可得符合条件的下标j需要满足pre[j-1] = pre[i]-k。所以我们考虑以i结尾的和为k的连续子数组的个数时只要统计有多少个前缀和为pre[i]-k的pre[j]即可。因此我们在计算时便可以用一个字典来实现pre[j]的值以及其个数,当我们遍历到nums[i]时可以以O(1)的时间找到在此之前pre[i]-k的个数,即求得以nums[i]为子数组右边界且满足和为k的子数组个数

代码

class Solution:
    def subarraySum(self, nums: List[int], k: int) -> int:
        res = 0
        import collections
        n = len(nums)
        presum = 0
        preSum = collections.defaultdict(int)
        preSum[0] = 1
        for i in range(n):
            presum+=nums[i]
            if(presum-k in preSum ):
                res+=preSum[presum-k]
            preSum[presum]+=1
        return res              

标签:pre,md,nums,560,int,数组,presum,热题,preSum
From: https://www.cnblogs.com/anamzingclown/p/17578457.html

相关文章

  • [SWPUCTF 2021 新生赛]easy_md5
    [SWPUCTF2021新生赛]easy_md5题目来源:nssctf题目类型:web涉及考点:PHP弱比较1.又是一道代码审计题,题目页面如下<?phphighlight_file(__FILE__);include'flag2.php';if(isset($_GET['name'])&&isset($_POST['password'])){$name=$_GET[&......
  • LeetCode 热题 100 之 438. 找到字符串中所有字母异位词
    题目给定两个字符串 s 和p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词指由相同字母重排列形成的字符串(包括相同的字符串)。示例 1:输入:s="cbaebabacd",p="abc"输出:[0,6]解释:起始索引等于0的子串是"cba"......
  • ubuntu “vt-x/amd-v hardware acceleration virtualbox" 错误
    BeforechangingBIOSsettingswemaywanttoseeifhardwarevirtualization(VT-xforIntel,AMD-VforAMDprocessors)wasalreadyenabled. Fromaterminalissuegrep--colorvmx/proc/cpuinfo##foranIntelprocessorgrep--colorsvm/proc/cpuinfo##f......
  • LeetCode 热题 100 之 3. 无重复字符的最长子串
    题目给定一个字符串s,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因为无重复字符的最长子串是"b",所以其长度为1。示例3:......
  • 560. 和为 K 的子数组(前缀和解决子串问题)
    给你一个整数数组nums和一个整数k,请你统计并返回该数组中和为k的连续子数组的个数。示例1:输入:nums=[1,1,1],k=2输出:2>思路每个元素对应一个“前缀和”遍历数组,根据当前“前缀和”,在map中寻找「与之相减==k」的历史前缀和当前“前缀和”与历史前缀和......
  • 附近数据库 MDF LDF文件 命令
    对SQLServer数据库进行优化,可以采取以下命令和技术:更新统计信息:更新统计信息可以帮助查询优化器生成更好的执行计划。使用以下命令手动更新统计信息:sqlUSEYourDatabaseName;GOUPDATESTATISTICSTableName;GO将YourDatabaseName替换为你的数据库名称,TableName替换......
  • uboot添加自定义命令 CMD
    原文:https://blog.csdn.net/weixin_41252596/article/details/128317180有些用户玩uboot比较花,除了引导系统还要做一堆驱动,有些驱动除了按流程执行还要留出命令行接口用于调试。比如我现在的设备外接了个fpga,fpga和cpu的接口已经做好了,但是为了调试要新增个命令,在命令行下手动与f......
  • 无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运
    如何解决"无法将“yarn”项识别为cmdlet、函数、脚本文件或可运"错误引言作为一名经验丰富的开发者,你可能会遇到一些新手常见的问题。其中一个常见的问题是在使用Yarn(一个流行的包管理工具)时可能会遇到错误:“无法将“yarn”项识别为cmdlet、函数、脚本文件或可运”。这篇文章将......
  • 35 pinctrl(一)简介.md
    1.简介pinctrl:即pincontroller引脚控制。对应设备的iomux和config模块2.pinctrol作用引脚的枚举和命名列出所以的设备的引脚,并对其进行命名引脚复用指定引脚复用情况。复用为GPIO还是IIC或者其他引脚配置配置引脚的基本属性。上拉,下拉,开漏等3.pinctrol学......
  • Qt(5.8.0)-Cmd模拟(纯手写)
    以下是对上述Qt程序的详细博客,使用Markdown的代码块方式呈现:Qt编程:实现一个简单的命令行窗口Qt是一种跨平台的C++应用程序开发框架,可以用于开发各种类型的应用程序,包括图形界面(GUI)应用程序。本文将介绍如何使用Qt框架实现一个简单的命令行窗口,类似于Windows的运行框,用户可以在......