一、Problem

在由若干 0 和 1 组成的数组 A 中,有多少个和为 S 的非空子数组。

输入:A = [1,0,1,0,1], S = 2
输出:4
解释:
如下面黑体所示,有 4 个满足题目要求的子数组:
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]

提示:

A.length <= 30000
0 <= S <= A.length
A[i] 为 0 或 1

二、Solution

方法一:前缀和 + map

第一眼看上去应该是一道双指针题,错不了,但是边边角角问题很多,最后还是用 map 优化了 O(n2)O(n^2)O(n2) 的暴力前缀和做了

思路

不用显示地枚举每个区间的前缀和,我们只需要累积当前和 s,如果在 map 中能找到 s-S,证明存在一段和为 S 的区间,

初始化:当 s-S = 0 的话,也就是第一次找到一个和为 S 的区间,此时 map 中没有为 0 的区间,所以应初始化 m[0] = 1

class Solution {public:int numSubarraysWithSum(vector<int>& A, int S) {int n = A.size(), s = 0, ans = 0;unordered_map<int, int> m;m[0] = 1;for (int x : A) {s += x;if (s - S >= 0)ans += m[s-S];m[s]++; }return ans;}
};

复杂度分析

  • 时间复杂度:O(n)O(n)O(n),
  • 空间复杂度:O(1)O(1)O(1),

【滑窗】B024_LC_和相同的二元子数组(暴力前缀和 / map 优化)相关推荐

  1. 【LeetCode】第930题——和相同的二元子数组(难度:中等)

    [LeetCode]第930题--和相同的二元子数组(难度:中等) 题目描述 解题思路 代码详解 思路一:哈希表+前缀和 思路二:滑窗 注意点 题目描述 给你一个二元数组 nums ,和一个整数 go ...

  2. LeetCode 930. 和相同的二元子数组(哈希+前缀和)

    文章目录 1. 题目 2. 解题 1. 题目 在由若干 0 和 1 组成的数组 A 中,有多少个和为 S 的非空子数组. 示例: 输入:A = [1,0,1,0,1], S = 2 输出:4 解释: ...

  3. Algorithm:C++语言实现之求最大连续子数组(暴力法、分治法、分析法、动态规划法)

    Algorithm:C++语言实现之求最大连续子数组(暴力法.分治法.分析法.动态规划法) 目录 求最大连续子数组 T1.code暴力法  O(n3) T2.分治法   O( n*log(n) ) T ...

  4. LeetCode 974. 和可被 K 整除的子数组(哈希map)

    1. 题目 给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续.非空)子数组的数目. 示例: 输入:A = [4,5,0,-2,-3,1], K = 5 输出:7 解释: 有 7 个子数组满 ...

  5. LeetCode 862. 和至少为 K 的最短子数组(前缀和+deque单调栈)

    1. 题目 返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K . 如果没有和至少为 K 的非空子数组,返回 -1 . 示例 1: 输入:A = [1], K = 1 输出:1示例 2: ...

  6. LeetCode 560. 和为K的子数组(前缀和差分)

    1. 题目 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1 ...

  7. 【算法】leetcode 974. 和可被 K 整除的子数组(前缀和思想)

    前言 前缀和相关: leetcode 974. 和可被 K 整除的子数组(前缀和思想) leetcode 560. 和为K的子数组(前缀和思想II) 问题来源 974. 和可被 K 整除的子数组 给定 ...

  8. 1248. 统计「优美子数组」 前缀和

    给你一个整数数组 nums 和一个整数 k. 如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」. 请返回这个数组中「优美子数组」的数目. 示例 1: 输入:nums ...

  9. 209 长度最小的子数组(前缀和+二分查找、滑动窗口)

    1. 问题描述: 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度.如果不存在符合条件的子数组,返回 0. 示例: 输入:s = ...

最新文章

  1. Git使用笔记(一)
  2. 四旋翼飞行器旋转矩阵公式推导!
  3. 趣学算法之哥德巴赫猜想的实现
  4. JConsole连接远程linux服务器配置
  5. 5中bug vue_苹果官网出BUG!这些都只要一两百元
  6. android wifi 连不上手机助手,usb调试断断续续的很烦?试试adb wifi调试
  7. 另一个进程已被死锁在资源上且该事务已被选作死锁牺牲品
  8. 征服RIA:元编程的思想
  9. Spring整合- mongodb
  10. flowable 中的互斥网关、并行网关、兼容网关、事件网关
  11. XenApp6.5启用3D功能
  12. 教你如何提取小程序素材无水印解析下载视频号视频
  13. 《多媒体在初中数学中的运用研究》课题研究报告
  14. 楚狂人--驱动开发基础
  15. MSB30M-ASEMI贴片整流桥MSB30M
  16. 一条 Select 语句 在 Postgresql 中的执行链路
  17. GBase 8s灾备集群HAC (三) 主备配置
  18. Laravel php 框架的使用写出第一个hello world,Laravel 入门配置
  19. 数据挖掘的R包和函数的集合
  20. 安装wordcloud(词云)库的具体操作

热门文章

  1. SimSwap 高保真人脸交换的高效框架 以及 deepfake辨别图片或者视频真假 dalle-mini文字生成图片
  2. PDF文档免费合并拆分软件及操作说明
  3. 9.6 Python 全课程总结和学习展望
  4. python导出依赖包
  5. 无人便利店系统代理发展前景分析
  6. 小问题3--找不到Microsoft edge下载的扩展位置问题解决
  7. 令人抓狂的Linux桥接设定奇遇
  8. 第一台纯意念控制的计算机是,全球第一台适用于全肢体中风康复的“纯意念控制”人工神经机器人系统是()。...
  9. 映美Jolimark 24针打印机驱动
  10. 微信小程序 本地存储