题目

给你一个整数数组 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 的子数组相关推荐

  1. 力扣 713. 乘积小于K的子数组

    题目 给定一个正整数数组 nums和整数 k . 请找出该数组内乘积小于 k 的连续的子数组的个数. 示例 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小 ...

  2. 560. 和为K的子数组 974. 和可被 K 整除的子数组 (哈希表)

    引言 这两道题非常相似,也是对哈希表运用的考察,两道题合到一起总结一下 560. 和为K的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入 ...

  3. 【LeetCode笔记】560. 和为K的子数组(Java、前缀和、哈希表)

    文章目录 题目描述 思路 & 代码 暴力法 O(n2n^2n2) 前缀和 + 哈希表 O(n) 二刷 题目描述 第一道前缀和题目- 思路 & 代码 暴力法 O(n2n^2n2) 固定一 ...

  4. 560. 和为K的子数组

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

  5. 力扣刷题-前k个高频元素

    力扣刷题-前k个高频元素 题目: 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例 1: 输入: nums = [1,1,1,2 ...

  6. LeetCode 937. 重新排列日志文件 / 1823. 找出游戏的获胜者(约瑟夫环问题) / 713. 乘积小于 K 的子数组

    937. 重新排列日志文件 2022.5.3 每日一题 题目描述 给你一个日志数组 logs.每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 . 有两种不同类型的日志: 字母日志: ...

  7. LeetCode 713、乘积小于 K 的子数组

    713.乘积小于 K 的子数组 1)题目描述 给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目. 示例 1: 输入:nums = [10,5 ...

  8. 0505|713. 乘积小于 K 的子数组

    0505|713. 乘积小于 K 的子数组 mid 滑动窗口. 求连续子树组的个数,"连续子树组"很强的暗示---使用滑动窗口. 本题只需记录 以每个数字为右边界所形成的有效子数组 ...

  9. LeetCode713. 乘积小于K的子数组

    LeetCode713. 乘积小于K的子数组 1. 问题描述 2. 思路 经典双指针问题 3. 代码 func numSubarrayProductLessThanK(nums []int, k in ...

最新文章

  1. 两个组件连线_如何正确的使用日志组件 Log4j、SLF4J、Logback
  2. ip地址详解,ip地址各种写法的意义,私有局域网搭建(IPv4)
  3. 让Bootstrap 3兼容IE8浏览器
  4. python安全攻防---信息收集---whois查询
  5. Linux 链接文件讲解
  6. cocos2d-x 之 CCProgressTimer
  7. 单列布局、两列布局、三列布局
  8. python colorbar 0变白色_Python matplotlib更改超过colorbar范围的值的默认颜色
  9. HorizontalListView中setSelection方法没有实现的数据刷新的解决方法
  10. 《勤哲Excel服务器专业开发》
  11. 从dig命令理解DNS
  12. 基于C语言的移位密码和仿射密码
  13. Android MVP架构手绘图
  14. python识别图片手写文字_Python徒手实现识别手写数字—简易图片数据库
  15. c语言逻辑运算符用法大全,C语言逻辑运算符介绍和示例
  16. 映美FP-530K+打印发票的各种经验
  17. 病毒分析三:勒索病毒分析
  18. 5000元档投影仪挑选指南,当贝F3与极米H3两款旗舰级投影到底怎么选?
  19. 工业机器人产业链展板_赵德明调研六大新产业十大产业链发展情况
  20. portknocking(端口试探)简介

热门文章

  1. 在Windows 使用Administrator账户
  2. MyBatis 03 动态SQL
  3. Macbook M1 软件不兼容的解决办法
  4. 智航学编程005(七彩虹)
  5. python多进程爬取上海房价并画出热力图分析
  6. 动态多光源 Light-Pre-Pass Lighting 实现
  7. What is Java thread priority? 什么是java线程优先级
  8. 时空大数据与众包计算学习总结
  9. ICP波长及分析校正
  10. Redmi AC2100通过ssh安装Breed