Subarray Division
https://www.hackerrank.com/challenges/the-birthday-bar/problem?isFullScreen=true
0(n^2):
1 int birthday(vector<int> s, int d, int m) { 2 3 int res=0; 4 int i=0,d1=0,m1=0; 5 for(int j=0;j<s.size();++j) 6 { 7 for (int k=j;k-j<m;++k) 8 { 9 d1+=s[k]; 10 if(d1==d&&m-1==k-j) 11 { 12 res++; 13 break; 14 // d1=0; 15 } 16 } 17 d1=0; 18 19 } 20 return res; 21 }
O(n+m):
1 int birthday(vector<int> s, int d, int m) { 2 3 int res=0; 4 int sum=0; 5 for(int i=0;i<m;++i) 6 { 7 sum+=s[i]; 8 } 9 if(sum==d) 10 { 11 res++; 12 } 13 for(int i=m;i<s.size();++i) 14 { 15 sum=sum-s[i-m]+s[i]; 16 if(sum==d) 17 { 18 res++; 19 } 20 } 21 22 return res; 23 }

浙公网安备 33010602011771号