【滑窗】B024_LC_和相同的二元子数组(暴力前缀和 / map 优化)
一、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 优化)相关推荐
- 【LeetCode】第930题——和相同的二元子数组(难度:中等)
[LeetCode]第930题--和相同的二元子数组(难度:中等) 题目描述 解题思路 代码详解 思路一:哈希表+前缀和 思路二:滑窗 注意点 题目描述 给你一个二元数组 nums ,和一个整数 go ...
- LeetCode 930. 和相同的二元子数组(哈希+前缀和)
文章目录 1. 题目 2. 解题 1. 题目 在由若干 0 和 1 组成的数组 A 中,有多少个和为 S 的非空子数组. 示例: 输入:A = [1,0,1,0,1], S = 2 输出:4 解释: ...
- Algorithm:C++语言实现之求最大连续子数组(暴力法、分治法、分析法、动态规划法)
Algorithm:C++语言实现之求最大连续子数组(暴力法.分治法.分析法.动态规划法) 目录 求最大连续子数组 T1.code暴力法 O(n3) T2.分治法 O( n*log(n) ) T ...
- LeetCode 974. 和可被 K 整除的子数组(哈希map)
1. 题目 给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续.非空)子数组的数目. 示例: 输入:A = [4,5,0,-2,-3,1], K = 5 输出:7 解释: 有 7 个子数组满 ...
- LeetCode 862. 和至少为 K 的最短子数组(前缀和+deque单调栈)
1. 题目 返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K . 如果没有和至少为 K 的非空子数组,返回 -1 . 示例 1: 输入:A = [1], K = 1 输出:1示例 2: ...
- LeetCode 560. 和为K的子数组(前缀和差分)
1. 题目 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1 ...
- 【算法】leetcode 974. 和可被 K 整除的子数组(前缀和思想)
前言 前缀和相关: leetcode 974. 和可被 K 整除的子数组(前缀和思想) leetcode 560. 和为K的子数组(前缀和思想II) 问题来源 974. 和可被 K 整除的子数组 给定 ...
- 1248. 统计「优美子数组」 前缀和
给你一个整数数组 nums 和一个整数 k. 如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」. 请返回这个数组中「优美子数组」的数目. 示例 1: 输入:nums ...
- 209 长度最小的子数组(前缀和+二分查找、滑动窗口)
1. 问题描述: 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度.如果不存在符合条件的子数组,返回 0. 示例: 输入:s = ...
最新文章
- Git使用笔记(一)
- 四旋翼飞行器旋转矩阵公式推导!
- 趣学算法之哥德巴赫猜想的实现
- JConsole连接远程linux服务器配置
- 5中bug vue_苹果官网出BUG!这些都只要一两百元
- android wifi 连不上手机助手,usb调试断断续续的很烦?试试adb wifi调试
- 另一个进程已被死锁在资源上且该事务已被选作死锁牺牲品
- 征服RIA:元编程的思想
- Spring整合- mongodb
- flowable 中的互斥网关、并行网关、兼容网关、事件网关
- XenApp6.5启用3D功能
- 教你如何提取小程序素材无水印解析下载视频号视频
- 《多媒体在初中数学中的运用研究》课题研究报告
- 楚狂人--驱动开发基础
- MSB30M-ASEMI贴片整流桥MSB30M
- 一条 Select 语句 在 Postgresql 中的执行链路
- GBase 8s灾备集群HAC (三) 主备配置
- Laravel php 框架的使用写出第一个hello world,Laravel 入门配置
- 数据挖掘的R包和函数的集合
- 安装wordcloud(词云)库的具体操作
热门文章
- SimSwap 高保真人脸交换的高效框架 以及 deepfake辨别图片或者视频真假 dalle-mini文字生成图片
- PDF文档免费合并拆分软件及操作说明
- 9.6 Python 全课程总结和学习展望
- python导出依赖包
- 无人便利店系统代理发展前景分析
- 小问题3--找不到Microsoft edge下载的扩展位置问题解决
- 令人抓狂的Linux桥接设定奇遇
- 第一台纯意念控制的计算机是,全球第一台适用于全肢体中风康复的“纯意念控制”人工神经机器人系统是()。...
- 映美Jolimark 24针打印机驱动
- 微信小程序 本地存储