zoukankan      html  css  js  c++  java
  • 523. Continuous Subarray Sum

    class Solution {
    public:
        bool checkSubarraySum(vector<int>& nums, int k) {
            unordered_map<int,int> allsum;
            allsum.insert(make_pair(0,-1));
            int sum=0;
            for(int i=0;i<nums.size();++i)
            {
                sum+=nums[i];
                if(k)sum%=k;
                auto j=allsum.find(sum);
                if(j!=allsum.end())
                {
                    if(i-j->second>1)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

  • 相关阅读:
    第九章 类的定义属性和方法
    第八章 函数作用域
    第七章 函数基础
    第六章 控制流程
    Http请求
    Django学习之-带参数的路由应用
    Django学习之--Ajax
    第二章:Django项目实例
    第一章:Django简介
    pytest汇总
  • 原文地址:https://www.cnblogs.com/lychnis/p/9281945.html
Copyright © 2011-2022 走看看