当前位置: 首页 > news >正文

力扣刷题Day 53:和为 K 的子数组(560)

1.题目描述

2.思路

方法1:灵茶山艾府佬的两次遍历法,先计算前缀和,然后遍历前缀和。

方法2:灵茶山艾府佬的一次遍历法,一边计算前缀和,一边遍历前缀和。

P.S. 至于为什么要用前缀和,是因为,nums[i]到nums[j - 1]的元素和为k可用前缀和表示为s[j] - s[i] = k,所以当s[i] == s[j] - k的时候nums[i]到nums[j - 1]的元素和为k,这样这道题就非常了然了。

3.代码(Python3)

方法1:

class Solution:def subarraySum(self, nums: List[int], k: int) -> int:# 计算前缀和presums = [0] * (len(nums) + 1)for i, num in enumerate(nums):presums[i + 1] = presums[i] + num# 遍历前缀和res = 0count = defaultdict(int)for presum in presums:res += count[presum - k]count[presum] += 1return res

方法2:

class Solution:def subarraySum(self, nums: List[int], k: int) -> int:res = presum = 0count = defaultdict(int)count[0] = 1for num in nums:presum += numres += count[presum - k]count[presum] += 1return res

4.执行情况

方法1:

方法2:

5.感想

最开始想尝试用滑动窗口做的,但是本题nums包含负数,而滑动窗口需要满足单调性。

相关文章:

  • 消息队列在异步推理任务中的作用
  • 86. Java 数字和字符串 - 数字
  • java刷题(6)
  • 部署n8n
  • 树莓派开箱上手教程(无需显示器版)
  • 战略-2.1 -战略分析(PEST/五力模型/成功关键因素)
  • 基于蒙特卡罗 AWGN信道调制信号互信息(信道容量)
  • Flink运行架构及并行度设置
  • P8943 Deception Point
  • python语法学习
  • C++ STL
  • DVWA通关笔记-靶场安装教程
  • [爬虫知识] IP代理
  • 从神经生物学到社会心理学:游戏沉迷机制的深度解构
  • 148. 排序链表
  • 大般涅槃经卷第三十五
  • 基于 ColBERT 框架的后交互 (late interaction) 模型速递:Reason-ModernColBERT
  • 车载中央域控制器测试【BCM模块介绍-外灯3】
  • [爬虫实战] 爬微博图片:xpath的具体运用
  • 类和对象(1)
  • 网站怎么添加代码/视频号的网站链接
  • 网站备案 公章/优化关键词的方法包括
  • 物流公司网站建设/石家庄seo按天扣费
  • wordpress动态导航/网站seo是什么意思
  • 自建网站怎么做二级页跳转/推广网页
  • 杭州pc网站制作公司/搜索引擎优化案例