当前位置: 首页 > news >正文

子串:和为K的子数组

题目描述:给定一个整型数组和一个k,返回和为K的子数组(连续非空)的个数。

示例 1:

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

示例 2:

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


求解思路1:枚举法

枚举所有子串,在找所有子串的过程中统计和为k的子串个数。

时间复杂度:O(n^2)

空间复杂度:O(1)

class Solution {public int subarraySum(int[] nums, int k) {int result = 0;// 子数组[left.....right]for (int left = 0; left < nums.length; left++) {int sum = 0;for (int right = left; right >= 0; right--) {sum += nums[right];if (sum == k) {result++;}}}return result;}
}

求解思路2:前缀和+哈希。分析如下:

假设,数组nums为:[4,1,5,2]

则前缀和preSum为:[4,5,10,12]

preSum[0]=nums[0]

preSum[1]=preSum[0]+nums[1]

preSum[2]=preSum[1]+nums[2]

preSum[3]=preSum[2]+nums[3]

有了前缀和,又因为k为某个子数组的和,那么我们可以得出下图结果:

所以题目就可以转换为:求解有几个preSum[j]。

时间复杂度:O(n)

空间复杂度:O(n)

class Solution {public int subarraySum(int[] nums, int k) {int result = 0;int preSum = 0;// preSumAndCountMap维护前缀和和前缀和出现的次数HashMap<Integer, Integer> preSumAndCountMap = new HashMap<>();// 初始化前缀和为0的次数为1preSumAndCountMap.put(0, 1);for (int i = 0; i < nums.length; i++) {preSum = preSum + nums[i];// 寻找一下是否有符合条件的if (preSumAndCountMap.containsKey(preSum - k)) {result = result + preSumAndCountMap.get(preSum - k);}// map表里记录一下int count = preSumAndCountMap.getOrDefault(preSum, 0);preSumAndCountMap.put(preSum, count + 1);}return result;}
}

练习地址:560. 和为 K 的子数组 - 力扣(LeetCode)

http://www.dtcms.com/a/352532.html

相关文章:

  • 高并发内存池(7)- CentralCache的核心设计
  • 如何对springboot mapper 编写单元测试
  • MATLAB Figure画布中绘制表格详解
  • Cortex-M 的Thumb指令集?
  • k8s pod 启动失败 Failed to create pod sandbox
  • Il2CppInspector 工具linux编译使用
  • 算法概述篇
  • Markdown渲染引擎——js技能提升
  • MyBatis-Flex是如何避免不同数据库语法差异的?
  • 【electron】一、安装,打包配置
  • 全面赋能政务领域——移动云以云化升级推动政务办公效能跃迁
  • 【硬件-笔试面试题-61】硬件/电子工程师,笔试面试题(知识点:RC电路中的充电时间常数)
  • vue3 + jsx 中使用native ui 组件插槽
  • babel使用及其底层原理介绍
  • Java 集合笔记
  • 第二章 进程与线程
  • 简明 | Yolo-v3结构理解摘要
  • Python-机器学习概述
  • ruoyi-vue(十二)——定时任务,缓存监控,服务监控以及系统接口
  • Python 轻量级的 ORM(对象关系映射)框架 - Peewee 入门教程
  • CentOS 7 升级 OpenSSH 10.0p2 完整教程(含 Telnet 备份)
  • 性能瓶颈定位更快更准:ARMS 持续剖析能力升级解析
  • 告别繁琐运维,拥抱自动化:EKS Auto Mode 实战指南
  • C代码学习笔记(二)
  • RK3506 开发板:嵌入式技术赋能多行业转型升级
  • 大数据时代UI前端的智能化升级路径:基于用户行为数据的预测性分析
  • PMP项目管理知识点-⑨项⽬资源管理
  • 大模型应用编排工具Dify之插件探索
  • 【LeetCode - 每日1题】求对角线最长矩形的面积
  • Claude 的优势深度解析:大模型竞争格局中的隐藏护城河