【前缀和】523. 连续的子数组和

  • 根据题意,我们能很明显的 能想到用前缀和的方法去做。
  • 因为前缀和 可以求 区间和 。
  • 也就是说,我们可以取长度大于2的区间,然后利用区间和,判断他是否%k==0。
  • 这种方法,简单粗暴
  • 代码如下
class Solution {
    public boolean checkSubarraySum(int[] nums, int k) {
        int len = nums.length;
        int[] presum = new int[len+1];
        for(int i =0;i<len;i++)
        {
            presum[i+1]=presum[i]+nums[i];
        }
        if(k==0)
        {
            return false;
        }
        if(nums.length<2)
        {
            return false;
        }
        for(int i =0;i<len;i++)
        {
            for(int j =i+2;j<=len;j++)
            {
                int temp = presum[j]-presum[i];
                if(temp==0)
                {
                    return true;
                }
                if(temp%k==0)
                {
                    return true;
                }
            }
        }
        
        return false;
    }
}

但是之前应该是可以的,如今是不能AC的,添加了一个测试数据。会超时。如下图
image

因此想别的方法。

posted @ 2022-03-16 20:58  取我方天画戟来  阅读(28)  评论(0)    收藏  举报