523. Continuous Subarray Sum

class Solution {
public:
bool checkSubarraySum(vector<int>& nums, int k) {
unordered_map<int,int> allsum;
allsum.insert(make_pair(,-));
int sum=;
for(int i=;i<nums.size();++i)
{
sum+=nums[i];
if(k)sum%=k;
auto j=allsum.find(sum);
if(j!=allsum.end())
{
if(i-j->second>)return true;
}
allsum.insert(make_pair(sum,i));
}
return false;
}
};

1

之前见过的题结果还是没搞定, 思路是没问题的,但是细节处理错导致不能ac;  本题要求连续的子数组之和是k的倍数, 看起来好像要求和, 其实是用减法来做加法,  任何一个子数组的和= 前n个数的和-前m个数的和, m<n

2

注意题目要求subarry最少2个,所以这里必须存索引, 同时需要判断当前的索引i 和 j的关系;  如果没要求2个, 可以把map换成set

3

k为0的情况, 这里有点奇怪,题目并不认为任意数是0的倍数....  但0又是0的倍数, 我也是搞不懂什么鬼, 所以不能写出if k==0 return true/false的判断

4

边界考虑, 如果前n个数组就已经符合了,但是map里面是空的! 然后就认为找不到答案..  所以记得初始化一下, key=0  value=-1, 表明前 -1 个元素的和为0

上一篇:20210414web渗透学习之Linux下三种主流提权学习(肠胃病住院期间更)


下一篇:2019-2020-2 网络对抗技术 20175206李得琛 Exp6 MSF基础应用