没有明白:
287 鸽巢原理
Subarray Sum Equals K
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int sum=0;
map<int,int> p;
int count=0;
p[0]=1;//不可缺少这一项
for(int i=0;i<nums.size();i++)
{
sum+=nums[i];
if(p.find(sum-k)!=p.end()) {//为什么加了这个就不通过
count+=p[sum-k];
p[sum]++;
}
return count;
}
}
};
413. Arithmetic Slices 这种方法为什么不对?
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
int n=A.size();
if(n<=2) return 0;
vector<int> sum(n+1,0);
//求累加和数组
for(int i=1;i<=n;i++)
sum[i]=sum[i-1]+A[i-1];
int count=0;
for(int i=3;i<=n;i++)
{
for(int k=3;i-k>=0;k++)
{
int cursum=sum[i]-sum[i-k];
if((cursum-k*A[i-k])%(k*(k-1)/2)==0)
count++;
}
}
return count;
}
};
209. Minimum Size Subarray Sum
int minSubArrayLen(int s, vector<int>& nums) { int n = nums.size(); if (n == 0) return 0; int ans = INT_MAX; vector<int> sums(n + 1, 0); //size = n+1 for easier calculations //sums[0]=0 : Meaning that it is the sum of first 0 elements //sums[1]=A[0] : Sum of first 1 elements //ans so on... for (int i = 1; i <= n; i++) sums[i] = sums[i - 1] + nums[i - 1]; for (int i = 1; i <= n; i++) { int to_find = s + sums[i - 1]; auto bound = lower_bound(sums.begin(), sums.end(), to_find); if (bound != sums.end()) { ans = min(ans, static_cast<int>(bound - (sums.begin() + i - 1))); } } return (ans != INT_MAX) ? ans : 0; }