力扣 560. 和为 K 的子数组
题目
给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数。
示例
输入:nums = [1,1,1], k = 2
输出:2
输入:nums = [1,2,3], k = 3
输出:2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subarray-sum-equals-k
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1:前缀和
1、preSum[i] 记录 nums[0…i-1] 的累加和。
2、如果我想求索引区间 [1, 4] 内的所有元素之和,就可以通过 preSum[5] - preSum[1] 得出。
Java实现1
class Solution {public int subarraySum(int[] nums, int k) {int n = nums.length;int[] preSum = new int[n + 1];preSum[0] = 0;int flag = 0;for (int i = 0; i < n; i++){preSum[i + 1] = preSum[i] + nums[i];}for (int i = 0; i < n + 1; i++){for (int j = i + 1; j < n + 1; j++){if (preSum[j] - preSum[i] == k) flag++;}}return flag;}
}
方法2:前缀和+哈希表
Java实现
class Solution {public int subarraySum(int[] nums, int k) {int n = nums.length, ans = 0;int[] preSum = new int[n + 1];preSum[0] = 0;for (int i = 0; i < n; i++) {preSum[i + 1] = preSum[i] + nums[i];}Map<Integer, Integer> map = new HashMap<>();map.put(0, 1);for (int i = 1; i <= n; i++) {int t = preSum[i];int d = t - k;ans += map.getOrDefault(d, 0);map.put(t, map.getOrDefault(t, 0) + 1);}return ans;}
}
力扣 560. 和为 K 的子数组相关推荐
- 力扣 713. 乘积小于K的子数组
题目 给定一个正整数数组 nums和整数 k . 请找出该数组内乘积小于 k 的连续的子数组的个数. 示例 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小 ...
- 560. 和为K的子数组 974. 和可被 K 整除的子数组 (哈希表)
引言 这两道题非常相似,也是对哈希表运用的考察,两道题合到一起总结一下 560. 和为K的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入 ...
- 【LeetCode笔记】560. 和为K的子数组(Java、前缀和、哈希表)
文章目录 题目描述 思路 & 代码 暴力法 O(n2n^2n2) 前缀和 + 哈希表 O(n) 二刷 题目描述 第一道前缀和题目- 思路 & 代码 暴力法 O(n2n^2n2) 固定一 ...
- 560. 和为K的子数组
560. 和为K的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] ...
- 力扣刷题-前k个高频元素
力扣刷题-前k个高频元素 题目: 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例 1: 输入: nums = [1,1,1,2 ...
- 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 ...
最新文章
- 两个组件连线_如何正确的使用日志组件 Log4j、SLF4J、Logback
- ip地址详解,ip地址各种写法的意义,私有局域网搭建(IPv4)
- 让Bootstrap 3兼容IE8浏览器
- python安全攻防---信息收集---whois查询
- Linux 链接文件讲解
- cocos2d-x 之 CCProgressTimer
- 单列布局、两列布局、三列布局
- python colorbar 0变白色_Python matplotlib更改超过colorbar范围的值的默认颜色
- HorizontalListView中setSelection方法没有实现的数据刷新的解决方法
- 《勤哲Excel服务器专业开发》
- 从dig命令理解DNS
- 基于C语言的移位密码和仿射密码
- Android MVP架构手绘图
- python识别图片手写文字_Python徒手实现识别手写数字—简易图片数据库
- c语言逻辑运算符用法大全,C语言逻辑运算符介绍和示例
- 映美FP-530K+打印发票的各种经验
- 病毒分析三:勒索病毒分析
- 5000元档投影仪挑选指南,当贝F3与极米H3两款旗舰级投影到底怎么选?
- 工业机器人产业链展板_赵德明调研六大新产业十大产业链发展情况
- portknocking(端口试探)简介