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

力扣刷题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包含负数,而滑动窗口需要满足单调性。

http://www.xdnf.cn/news/8623.html

相关文章:

  • WHAT - 兆比特每秒 vs 兆字节每秒
  • 处理三高业务
  • 趋势触发策略
  • 第四十九节:图像分割-基于深度学习的图像分割
  • 国际前沿知识系列四:格兰杰因果分析在脑区应变原因分析中的应用
  • 深入理解API:从概念到实战
  • leetcode 两数相加 java
  • 51页 @《人工智能生命体 新启点》中國龍 原创连载
  • redis的AOF恢复数据
  • CMake基础:CMakeLists.txt 文件结构和语法
  • github公开项目爬取
  • SMT贴片机操作核心步骤精要
  • 在kali中搞个jdk1.8.,又不破坏环境
  • Python猜拳“小”游戏
  • 动态IP:像变色龙一样自由切换网络身份
  • 【编程语言】【C语言】一篇文件构建C语言知识体系
  • 神经算子与FNO技术详解
  • 几种环境下的Postgres数据库安装
  • docker commit除了提交容器成镜像,还能搞什么之修改cmd命令
  • 全面指南:使用Node.js和Python连接与操作MongoDB
  • 汉字不仅是一种语言 还是当作艺术形式来展现
  • 基于Springboot + vue3实现的中国戏曲文化传播系统
  • Linux环境变量与地址空间
  • 冰箱热交换的原理以及如何加氟
  • 超越OpenAI CodeX的软件工程智能体:Jules
  • Axure元件动作六:设置图片
  • 高分辨率北半球多年冻土数据集(2000-2016)
  • 科学计算中的深度学习模型精解:CNN、U-Net 和 Diffusion Models
  • 【KWDB 创作者计划】KWDB单机性能测试:从零开始的详细教程
  • 前端项目部署 打包上线