【前缀和】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的,添加了一个测试数据。会超时。如下图
因此想别的方法。