fork download
  1. // Find the count. of subarray of shortest length whose sum==k
  2. // A = {10,5,2,7,1,9,8,7} k = 15
  3. #include<bits/stdc++.h>
  4. using namespace std;
  5.  
  6. #define ll long long
  7.  
  8. void solve(){
  9. int n,k,s=0,mn,numberOfMin=0;
  10. cin>>n>>k;
  11. mn=n;
  12. vector<int>v(n);
  13. for(int &i:v)cin>>i;
  14. unordered_map<int,int>mp;
  15. for(int i=0;i<n;i++){
  16. s+=v[i];
  17. if(s==k){
  18. if(mn==i+1)numberOfMin++;
  19. else if(mn>i+1){
  20. numberOfMin=1;
  21. mn=i+1;
  22. }
  23. }
  24. int targ=s-k;
  25. if(mp.count(targ)){
  26. if(mn==i-mp[targ])numberOfMin++;
  27. else if(mn>i-mp[targ]){
  28. numberOfMin=1;
  29. mn=i-mp[targ];
  30. }
  31. }
  32. mp[s]=i;
  33. }
  34. cout<<"Min length is "<<mn<<" and min len subarrays are "<<numberOfMin<<"\n";
  35. }
  36.  
  37. int main(){
  38. ios_base::sync_with_stdio(false);
  39. cin.tie(NULL);
  40. solve();
  41. return 0;
  42. }
Success #stdin #stdout 0.01s 5276KB
stdin
8 15
10 5 2 7 1 9 8 7
stdout
Min length is 2 and min len subarrays are 2