相关题目

和可被 K 整除的子数组
连续的子数组和
Delete Sublist to Make Sum Divisible By K

思路

前缀和就不单独说了,同余定理贴一个百度百科

同余定理

数论中的重要概念。给定一个正整数m,如果两个整数a和b满足a-b能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m)。对模m同余是整数的一个等价关系。
转换成数学语言如下述所示

 /*假设有a,b,k三个数满足 a%k == b%k则 (a-b)%k == 0且为充要条件*/

题1

我们拿相关题目的第一题为例

代码实现

class Solution {public:int subarraysDivByK(vector<int>& nums, int k) {int count = 0;unordered_map<int,int> hash;hash[0] = 1;   //自身能被整除需要直接计数int cursum = 0;for(int i = 0;i<nums.size();i++){cursum += nums[i];int mod = (cursum%k+k)%k;if(hash.count(mod)) count += hash[mod];hash[mod]++;}return count;}
};

时间复杂度为O(n),而暴力求解时间复杂度为O(n^2)

相关题目第2、3题主要就是在上述基础上添加了一些条件,可以再讲讲第三题

题3

代码实现

int solve(vector<int>& nums, int k) {int sum = accumulate(nums.begin(),nums.end(),0);int target = sum%k;unordered_map<int,int> hash;hash[0]=-1;int presum = 0;int minlen = nums.size();for(int i = 0;i<nums.size();i++){presum += nums[i]; //当前前缀和int mod = presum%k;hash[mod] = i;//去找有没有前缀和的余数和当前余数相等,有就返回长度if(hash.count((presum-target)%k)){minlen = min(minlen,i-hash[(presum-target)%k]);}}return minlen == nums.size() ? -1:minlen;  //cannot delete entire list
}

题2

今天做了一下那就加上来吧

代码

class Solution {public:bool checkSubarraySum(vector<int>& nums, int k) {unordered_map<int,int> hash;hash[0] = -1;int cursum = 0;for(int i = 0;i<nums.size();i++){cursum+=nums[i];int mod = cursum%k;//不能更新,只能加入if(hash.count(mod) && i-hash[mod]>1) return true;if(hash.count(mod) == 0) hash[mod] = i;}return false;}
};

这里的hash存储的是第一次出现新余数时的 i,意味着如果再次出现相同的mod,我们不能更新。因为这一题需要长度至少为2,意味着我们要让 ij 的差值尽可能大。当再次出现相同余数时,比较 ij 的插值,大于等于2即可返回true

后注

c++中负数取余规则是一律向0取余,那么当除数和被除数符号不相等时就会出现问题,例如

 int a = -1;int b = 2;cout << a % b;           //结果为-1cout <<(a % b + b) % b;  //结果为1

所以我们需要通过第二个公式来获得正确的余数

同余定理+前缀和解题技巧相关推荐

  1. 同余定理在计算机科学的应用,同余定理在小学数学竞赛中的应用

    肖丽 [摘要]本研究基于高观点视角,例析同余定理在小学数学竞赛中的应用,探讨运用其解决小学奥数问题的优越性. [关键词]小学数学竞赛 同余定理 应用 [中图分类号]G623.5[文献标识码]A [文章 ...

  2. 计算机专业英语数学,初中数学各题型解题技巧

    数学复习是一个系统的工程,许多同学都在想,如何才能掌握技巧,更好地利用宝贵有限的时间,让自己能够取得一个不错的成呢?今天沪江小编整理了初中各个题型的解题技巧给大家,希望大家能在期末考试中取得理想的成绩 ...

  3. Codeforces数学1600----day1[同余定理,树状数组+两次二分,,组合计数]

    1.C. Kuroni and Impossible Calculation **知识点:同余定理 ** #include <iostream> #include <cstdio&g ...

  4. 做题不如巧做题,初中数学题型解题技巧都在这!

    ▲   点击查看 今天,小天就为大家整理了初中数学各类题型解题技巧.我们一起往下看哦. 1.数形结合思想 根据数学问题的条件和结论之间的内在联系,既分析其代数含义,又揭示其几何意义:使数量关系和图形巧 ...

  5. ACM常用的解题技巧:尺取法

    常用的解题技巧:尺取法 尺取法:顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案.之所以需要 ...

  6. 行测-数量关系-解题技巧-代入排除法

    引言 很高兴能和大家一起学习<数量关系>这一模块,这是公务员考试中最难的 模块,甚至会被很多同学放弃,这是一个严重的错误. 历年教课以来,但凡达到 70 以上高分的同学,数量这一模块都有很 ...

  7. ACM常用的解题技巧:尺取法及相关例题

    常用的解题技巧:尺取法 尺取法:顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案.之所以需要 ...

  8. 高考数学选择题解题技巧 如何得高分(纯干货)

    本文作者:vxbomath 选择题不管在高考试卷中所占多大比例,选择题是数学必考题型之一, 选择题和答题不同之处,选择题需要多快.恨.准的解题技巧.下面我就对高考数学选择题的解法作一些归纳. 一.高考 ...

  9. 2019年高中数学向量解题技巧_(高考题)

    2019年高中数学向量解题技巧_(高考题) 向量知识点是高中数学考试必考内容,也是2019年高考必考内容之一.下面老师针对向量知识点内容和题型总结归纳具体的解题技巧和方祛.让同学们有更多.更好.更快的 ...

最新文章

  1. ev3dev:设置自动登录wifi
  2. Android实现点击通知栏后,先启动应用再打开目标Activity
  3. 卧槽!Python学习神器~
  4. java getidentifier_android – 如何使用getResource.getIdentifier()获取布局?
  5. springside4例子
  6. 【bzoj 1087】[SCOI2005]互不侵犯King(状压dp)
  7. 移动开发者应注意的2012年五趋势
  8. python time sleep 阻塞 异步_python 之 并发编程(进程池与线程池、同步异步阻塞非阻塞、线程queue)...
  9. 音视频录制基础原理概念
  10. ubuntu创建“新建文本文档”的快捷方式
  11. 编码 GBK 的不可映射字符 (0x81)
  12. 使用VCS 仿真后,通过DVE 观察波形,多维数据显示not load问题及解决方案
  13. Context R-CNN一种基于注意力机制的视频检测算法
  14. 树莓派提升计划 Android应用用MiniChatAppApp之AppServer构建
  15. html5好看画布,10个会让你惊叹不已的HTML5画布(CANVAS)技术应用演
  16. web标准是html5,什么是HTML5-WEB标准专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....
  17. 解决PotPlayer播放视频没有声音
  18. 什么是联盟营销以及如何使用它在网上赚更多的钱
  19. 引起婴儿湿疹的原因有哪些?
  20. 发那科机器人控制柜示教器不通电_FANUC发那科机器人示教器A05B-2301-C305液晶屏维修...

热门文章

  1. python绘制语谱图(详细注释)
  2. 【教程】树莓派bt下载机之Transmission Web Interface
  3. linux中fflush函数和printf函数 【转】
  4. 游戏服务器生成全局唯一ID的几种方法
  5. python 计算牛顿差商,计算并化简牛顿插值多项式
  6. 深入理解布局约束 | 开发者说·DTalk
  7. 战国策评析(二)---秦
  8. 快牛策略——嵌入式计算机
  9. RGB接口屏和SPI接口屏的引脚
  10. JPA之EntityManager踩坑笔记:更改PersistenceContext