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

使数组和能被P整除[同余定理+同余定理变形]

同余定理+同余定理变形

  • 前言
  • 一、使数组和能被P整除
  • 二、同余定理+变形
  • 总结
  • 参考资料

前言

同余定理非常经典,采用前缀和 + map,当两个余数前缀和为一个值时,则中间一段子数组刚好对P整除。但是能否找到前面是否有一段子数组和可以对P整除呐?反向思考,找map[P - mod]就知道中间一段子数组和对P取余为mod,前面一段子数组和对P取余为0.

一、使数组和能被P整除

在这里插入图片描述

二、同余定理+变形

  • 基本思路
    // 前缀和+map,记录前面除p多余的情况a,a属于[0,p)
    // 有一样的余数,不就能整除了嘛,记录余数+位置,同余定理。
  • 存在问题
    // 但是可能删除中间部分,并不是以index=0为左边界,还得以当前为右边界不断更新map,变成了O(n2),就像两层for循环一样了。
    // 但O(n2)显然超时,回到map,可不可以不for循环更新map,直接反向思考,前面为0,那中间那部分余数就算多余的。
func minSubarray(nums []int, p int) int {// 求整个数组和对p的余数sum := getMod(nums,p)// 前缀和记录,可以正向+反向使用前缀和prefix := map[int]int{0:-1}pre,m := 0,len(nums) // 前缀和,最小删除子数组的长度for i,n := range nums {mod := (n + pre) % p // 正向余数x := (p - sum + mod) % p // 反向余数,可得到中间一段子数组和为sum// 正向余数,同余定理,删除最前面的一截。if v,ok := prefix[sum];ok { m = min(m,v + 1)}// 反向余数,以当前位置为需要删除子数组的右边界,寻找符合要求的左边界。if v,ok := prefix[x];ok {m = min(m,i - v)}prefix[mod] = ipre = mod}// 没有寻找到可删除的子数组。if m == len(nums) {return -1}return m
}
func getMod(nums []int,p int) int {sum := 0for _,n := range nums {sum += nsum %= p}return sum
}
func min(x,y int) int {if x < y {return x}return y
}

总结

1)同余定理,可以O(N)复杂度求到子数组和对P整除,基于此多多思考其本质,才能另辟蹊径,做到其变形解法。

参考资料

[1] LeetCode 使数组和能被P整除

http://www.lryc.cn/news/37626.html

相关文章:

  • 25k的Java开发常问的Synchronized问题有哪些?
  • ES增量同步方案
  • 计算器--课后程序(Python程序开发案例教程-黑马程序员编著-第6章-课后作业)
  • YOLOv5中添加SE模块详解——原理+代码
  • arcgispro3.1(账号登陆)
  • VB6换个思路解决微信下载文件只读的问题(含源码)
  • Allegro如何知道组合操作命令的拼写
  • CDO高效处理气象数据
  • 1. Qt Designer Studio界面介绍
  • elementUI+vue_vue-admin-template框架
  • SpringBoot项目使用Schedule注释创建定时任务
  • 学习 Python 之 Pygame 开发魂斗罗(十一)
  • Linux驱动开发
  • 32--Vue-前端开发-Vue语法之组件化开发
  • 打怪升级之CFileDialog类介绍
  • 配天智造自主原创数字工厂:百余名员工人均创收122万
  • COLMAP
  • 2023-3-8 刷题情况
  • 关于长连接服务器和客户端之间要加入心跳的一些讨论
  • LeetCode——1590. 使数组和能被 P 整除
  • 12N65-ASEMI高压MOS管12N65
  • cushy-serial 一个轻量级Python serial库
  • 音视频开发系列(7)——Opengl常用Api介绍part1
  • linux时间的特殊用法
  • axios 封装,API接口统一管理
  • SpringBoot使用Redis实现缓存
  • [失业前端恶补算法]JavaScript leetcode刷题top100(三)
  • Spark RDD的设计与运行原理
  • Golang的下载与安装
  • 广州蓝景分享—8大Web前端开发的趋势