https://leetcode.com/problems/continuous-subarray-sum/description/
题目:判断某一个字段和是否可以整除k
思路1 :前缀和
class Solution {
public:
bool checkSubarraySum(vector<int>& nums, int k) {
int len =nums.size();
if(len<=1) return 0;
int *sum=new int [len+1];
sum[0]=0;
for(int x=1;x<=len;x++)
sum[x]=sum[x-1]+nums[x-1];
int ok=0;
for(int x=1;x<len;x++)
{
for(int y=x+1;y<=len;y++)
{
if((k!=0&&(sum[y]-sum[x-1])%k==0)||(k==0&&(sum[y]-sum[x-1])==0))
return 1;
}
}
return 0;
}
};
思路2:前缀和优化:
class Solution {
public:
bool checkSubarraySum(vector<int>& nums, int k) {
int len =nums.size(),sum=0,pre=0;
if(len<=1) return 0;
set<int>s;
for(int x=0;x<len;x++)
{
sum+=nums[x];
int mod=(k==0)?sum:sum%k;
if(s.count(mod)) return 1;
s.insert(pre);
pre=mod;
}
return 0;
}
};