T560和为k的子数组
case1: 暴力法:
class Solution {/**/public int subarraySum(int[] nums, int k) {int len = nums.length;if(len<=0) return 0;int res = 0;for(int start=1;start<len;start++){int sum = 0;for(int j=start;j<len;j++){sum+=nums[j];//注意这里不能跳出循环,因为当序列长度不同时为不同的序列if(sum==k){res++;}}}return res;}
}
CASE2:改进暴力法:
构建一个memo(这里memo借助Map实现,因为无法预估和的大小所有使用数组来实现)用于记录能索引0开始的能构成和为sum的子序列的个数
当当前从下标0开始构造子序列A的和为sum时,且前面有从0开始构造的和为sum-k的子序列B,那么,夹在这两个子序列之间的序列必为和为k的子序列!!!【因为A,B是共起点的!!!且因为sum=(sum-k)+k)】
所以有几个序列的和为sum-k,就有几个子序列的和为k
然后只需要将这些所有组合进行一个累加即可
class Solution {public int subarraySum(int[] nums, int k) {int len = nums.length;if(len<=0) return 0;int res = 0;int sum = 0;//memo用于记录能索引0开始的能构成和为sum的子序列的个数Map<Integer,Integer> memo = new HashMap<>();//当子序列为空时,其和必为0,所以能构成和为0的子序列数至少是1memo.put(0,1);for(int j=0;j<len;j++){sum+=nums[j];//累积所有的结果,而且要注意以下这个if和下面那个put操作的先后顺序if(memo.containsKey(sum-k)){res+=memo.get(sum-k);}memo.put(sum,memo.getOrDefault(sum,0)+1);}return res;}
}
T560和为k的子数组相关推荐
- LeetCode 937. 重新排列日志文件 / 1823. 找出游戏的获胜者(约瑟夫环问题) / 713. 乘积小于 K 的子数组
937. 重新排列日志文件 2022.5.3 每日一题 题目描述 给你一个日志数组 logs.每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 . 有两种不同类型的日志: 字母日志: ...
- LeetCode 713、乘积小于 K 的子数组
713.乘积小于 K 的子数组 1)题目描述 给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目. 示例 1: 输入:nums = [10,5 ...
- 0505|713. 乘积小于 K 的子数组
0505|713. 乘积小于 K 的子数组 mid 滑动窗口. 求连续子树组的个数,"连续子树组"很强的暗示---使用滑动窗口. 本题只需记录 以每个数字为右边界所形成的有效子数组 ...
- LeetCode713. 乘积小于K的子数组
LeetCode713. 乘积小于K的子数组 1. 问题描述 2. 思路 经典双指针问题 3. 代码 func numSubarrayProductLessThanK(nums []int, k in ...
- Leetcode--713. 乘积小于k的子数组
给定一个正整数数组 nums. 找出该数组内乘积小于 k 的连续的子数组的个数. 示例 1: 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小于100的子数 ...
- 【LeetCode笔记】560. 和为K的子数组(Java、前缀和、哈希表)
文章目录 题目描述 思路 & 代码 暴力法 O(n2n^2n2) 前缀和 + 哈希表 O(n) 二刷 题目描述 第一道前缀和题目- 思路 & 代码 暴力法 O(n2n^2n2) 固定一 ...
- 20191021:(leetcode习题)乘积小于K的子数组
乘积小于K的子数组 题目 大致思路 代码实现 题目 给定一个正整数数组 nums.找出该数组内乘积小于 k 的连续的子数组的个数. 输入: nums = [10,5,2,6], k = 100 输出: ...
- 力扣 713. 乘积小于K的子数组
题目 给定一个正整数数组 nums和整数 k . 请找出该数组内乘积小于 k 的连续的子数组的个数. 示例 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小 ...
- LeetCode 713 乘积小于K的子数组
写在前面 一道很艺术的编程题~做学习记录 题目描述 给定一个正整数数组 nums和整数 k . 请找出该数组内乘积小于 k 的连续的子数组的个数. 示例 示例1: 输入: nums = [10,5,2 ...
最新文章
- .NET WinForm中给DataGridView自定义ToolTip并设置ToolTip的样式
- 蓝桥杯-c++_ch04_02_修正版(java)
- redhat6.5 yum register 问题
- 算法模板-广度优先遍历
- 【渝粤教育】 国家开放大学2020年春季 1366英语教学理论与实践 参考试题
- iOS:×××送(二)----pem证书的生成
- tomcat中三种部署项目的方法(转)
- JavaScript数组的声明及使用(1)
- ERP知识普及连载(13)
- 转:初学shell脚本--shell语法使用
- logistic映射图像加密matlab,基于Logistic映射与排序变换的图像加密算法
- c++ primer kindle_开箱测评掌阅iReader Ligtht悦享版阅读器,电纸书不止有kindle
- 海德汉圆光栅编码器RON786C/RON886C/RON785C/RPN886/RON285/RON287/RON275参数针脚定义
- +new Date是什么意思?
- 详细分析本机号码一键登录原理!建议收藏
- TN和STN的液晶屏制作流程以及工艺介绍
- 信雅达,一家不尊重应聘者的公司
- STRM--用Oracle Streams wizard生成配置脚本
- 畅言普通话软件测试准确率高吗,畅言普通话测试准确吗?畅言普通话准确度介绍...
- 角速度与旋转矩阵的转换关系及思考