前缀和是数据结构与算法中比较重要的知识,前缀和经常可以结合哈希表解决很多有意思的问题。为了方便学习,在这里总结leetcode中出现的前缀和问题。

525. 连续数组

给定一个二进制数组 nums (只含有0,1), 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。

示例 1:

输入: nums = [0,1]
输出: 2
说明: [0, 1] 是具有相同数量0和1的最长连续子数组。
示例 2:

输入: nums = [0,1,0]
输出: 2
说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。

思路:我们用ans来统计数组中0,1出现的次数,即当出现0时,ans - 1,当出现1时,ans + 1。这样我们就可以知道index下出现了0和1出现的个数差。我们用dict来存储ans,key=index,value=ans。因为在统计ans之前,0,1个数差为0,所以初始化时dict = {0:-1}。当ans没有出现在dict时,我们将ans与index记录到dict中,当dict已经存在ans,那么说明这段子序列里0和1出现次数相同,我们计算出子序列的个数,即i - dict[ans]。然后遍历nums找到最长连续子数组的长度。为了方便理解请看下图。

class Solution:def findMaxLength(self, nums: List[int]) -> int:sum_dict = {0:-1}ans = 0res = 0for i,num in enumerate(nums):if num == 0:ans -= 1elif num == 1:ans += 1if ans not in sum_dict:sum_dict[ans] = ielif ans in sum_dict:res = max(res, i - sum_dict[ans])return res

523. 连续的子数组和
给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:

子数组大小 至少为 2 ,且
子数组元素总和为 k 的倍数。
如果存在,返回 true ;否则,返回 false 。

如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。

示例 1:

输入:nums = [23,2,4,6,7], k = 6
输出:true
解释:[2,4] 是一个大小为 2 的子数组,并且和为 6 。

示例 2:

输入:nums = [23,2,6,4,7], k = 6
输出:true
解释:[23, 2, 6, 4, 7] 是大小为 5 的子数组,并且和为 42 。
42 是 6 的倍数,因为 42 = 7 * 6 且 7 是一个整数。

示例 3:

输入:nums = [23,2,6,4,7], k = 13
输出:false

思路:为了方便计算子数组的和,我们用presum[i]统计0-i索引下的数组和,任意i-j的数组和可以用presum[j] - presum[i]获得。根据同余定理,我们可以用dict存储presum % k的值,当遍历presum时,如果i - dict[presum[i] >=2就返回True

class Solution:def checkSubarraySum(self, nums: List[int], k: int) -> bool:presum = [0]*(len(nums) + 1)for i in range(1,len(presum)):presum[i] = presum[i-1] + nums[i-1]presum[i] %= kpredict = {}for i, re in enumerate(presum):if re not in predict:predict[re] = ifor i in range(2, len(presum)):if i - predict[presum[i]] >= 2:return Truereturn False

python 前缀和总结相关推荐

  1. python前缀表达式求值_python数据结构与算法 11 后缀表达式求值

    从本节开始,删除原版的英文,直接发译后的文稿. 后缀表达式求值 栈的最一个应用例子,计算一个后缀表达式的值.这个例子中仍然用栈的数据结构.不过,当扫描表达式的时候,这次是操作数压栈等待,不是转换算法中 ...

  2. python issuperset_Superset的各种疑难解答

    之前安利了大家Superset,后台留言的同学比较多,主要是安装上的各种坑.superset因为是企业级的轻量BI,对window的支持不太好.所以大家疑问比较多,单独增加一篇推文在这里统一解答下. ...

  3. 使用Python将MQTT传感器数据记录到SQL数据库

    使用Python将MQTT传感器数据记录到SQL数据库 在这个项目中,我们将创建一个简单的数据记录器,将数据记录到sqlite数据库. 该项目包括两个模块. sql logger类模块sql_logg ...

  4. 7打开pycharm_Python+pycharm安装、关联教程

    1.在Python官网下载Python对应版本:(以WIN10系统,64位为例) Python Releases for Windows​www.python.org 图一 下载链接 2.安装包下载好 ...

  5. 21 Rest高级客户端实践(七):一个小案例

    文章目录 1 准备 2 编码 1 准备 之前的索引 PUT books {"settings": {"number_of_shards": 3, "n ...

  6. WSGI Server

    1 WSGI WSGI是 Web Server Gateway Interface 的缩写,它是 Python应用程序(application)或框架(如 Django)和 Web服务器之间的一种接口 ...

  7. 又是一个名叫草泥马的项目:thefuck--修复错误的命令行扩展

    CSDN GitHub 又是一个名叫草泥马的项目:thefuck AderXCoding/system/tools/the_fuck 本文转载自 又是一个名叫草泥马的项目:thefuck 一般而言,能 ...

  8. python 作用域 前缀_Python面试题:杂项内容

    1.解释一下 Python 中 pass 语句的作用? 答:pass 实际上就是一个占位符,在写一个函数但是不确定里面写啥的时候,这个时候可以使用 pass.示例如下def foo(): pass 2 ...

  9. python 作用域 前缀_Python 之作用域和名字空间

    作用域与名字空间 Python有一个核心概念是名字空间(namespace),namespace是一个name到object 的映射关系,Python有很多namespace,因此,在代码中如果碰到一 ...

  10. Python中最长公共前缀

    最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀.如果不存在公共前缀,返回空字符串 "". 示例 1:输入: ["flower","flow& ...

最新文章

  1. 怎么重启网站mysql数据库_如何重启MySQL数据库服务
  2. 清华思客 | 蓝志勇:人工智能时代公共治理创新迫在眉睫
  3. python接口服务两种方式(被调用、主动推送)
  4. 如何使用腾讯云提供的虚拟主机
  5. Tecplot 360 按教程安装完毕后,弹出“Is your Tecplot 360 EX liense valid?”【终极解决办法】
  6. 调出sharepoint错误的详细页面
  7. android知识图谱
  8. 基于php校园失物招领,校园失物招领系统设计
  9. android 表格控件点击事件,Android零基础入门|RecyclerView点击事件处理
  10. 使用threeJS根据点的坐标绘制曲线
  11. CSS3过渡动画关键帧动画
  12. 【MongoDb入门】15分钟让你敢说自己会用MongoDB了
  13. linux grep,egrep,正则表达式
  14. tokenize java,Java split string - Java tokenize string examples - 入门小站-rumenz.com
  15. 计算机老师任课教师寄语,任课老师新学期寄语
  16. android 方法映射,高通Android平台驱动层 MSM8916 键值映射方法
  17. 计算机无法打开这个应用,Windows10打开软件时提示“无法打开这个应用”怎么解决?...
  18. 如何用计算机产生随机数,如何在计算器产生随机数
  19. 注册流程(分离HLR/HSS)
  20. 金额平均分配算法 python实现

热门文章

  1. isilon域环境配置
  2. Python Scrapy爬虫框架详解
  3. Stata:快速转换工作路径
  4. 遥感图像处理之计算植被覆盖度公式
  5. Windows 技术篇-修改电脑时间格式显示为12小时、24小时时间制式方法
  6. 密码生成器(字母+数字+特殊字符)
  7. 计算机美术基础课程标准,《计算机美术基础》教学大纲 课程标准 最全最新.doc...
  8. 夜神模拟器安装frida-server图文详解
  9. php获取openid 40163报错,微信网页授权 通过code获取openid 报错40163 code been used
  10. jmeter性能测试2-模拟多用户登录