Advertisement
maycod23

Subarray_Concept

Mar 25th, 2023
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. bool check_subarray_0sum(vector<int> &v, int n) {
  5. map<int, int> m;
  6. int curr_sum = 0;
  7. for (int i = 0; i < n; i++) {
  8. curr_sum += v[i];
  9. if (m.find(curr_sum) != m.end()) return true;
  10. m[curr_sum] = 1;//marked the cur_sum
  11. }
  12. return false;
  13. }
  14.  
  15. int count_subarrays_0sum(vector<int>& v, int n) {
  16. map<int, int> m;
  17. int curr_sum = 0, countans = 0;
  18. m[0]++;
  19. for (int i = 0; i < n; i++) {
  20. curr_sum += v[i];
  21. if (m.find(curr_sum) != m.end()) {
  22. countans += m[curr_sum];
  23. }
  24. m[curr_sum]++;//marked the cur_sum
  25. }
  26. return countans;
  27. }
  28.  
  29.  
  30. int maxlength_subarray_0sum(vector<int> &v, int n) {
  31. map<int, int> m;
  32. int curr_sum = 0, maxlen = 0;
  33. m[0] = -1;
  34. for (int i = 0; i < n; i++) {
  35. curr_sum += v[i];
  36. if (m.find(curr_sum) != m.end()) {
  37. maxlen = max(maxlen, (i - m[curr_sum]));
  38. }
  39. else {
  40. m[curr_sum] = i;
  41. }
  42. }
  43. return maxlen;
  44. }
  45.  
  46.  
  47.  
  48.  
  49. bool check_subarray_ksum(vector<int> &v, int n, int k) {
  50. map<int, int> m;
  51. int curr_sum = 0;
  52. for (int i = 0; i < n; i++) {
  53. curr_sum += v[i];
  54. if (m.find(curr_sum - k) != m.end()) return true;
  55. m[curr_sum] = 1;//marked the cur_sum
  56. }
  57. return false;
  58. }
  59.  
  60. int count_subarrays_ksum(vector<int>& v, int n, int k) {
  61. map<int, int> m;
  62. int curr_sum = 0, countans = 0;
  63. m[0]++;
  64. for (int i = 0; i < n; i++) {
  65. curr_sum += v[i];
  66. if (m.find(curr_sum - k) != m.end()) {
  67. countans += m[curr_sum - k];
  68. }
  69. m[curr_sum]++;//marked the cur_sum
  70. }
  71. return countans;
  72. }
  73.  
  74.  
  75. int maxlength_subarray_ksum(vector<int> &v, int n, int k) {
  76. map<int, int> m;
  77. int curr_sum = 0, maxlen = 0;
  78. m[0] = -1;
  79. for (int i = 0; i < n; i++) {
  80. curr_sum += v[i];
  81. if (m.find(curr_sum - k) != m.end()) {
  82. maxlen = max(maxlen, (i - m[curr_sum - k]));
  83. }
  84. else {
  85. m[curr_sum] = i;
  86. }
  87. }
  88. return maxlen;
  89. }
  90.  
  91.  
  92.  
  93. int main() {
  94.  
  95. /*
  96. given an array of length n, a[n];
  97. n<=10^5, a[i]<=10^9
  98. 1.> check whether a subarray with sum 0 present or not
  99. 2.> count number of subarrays with sum 0.
  100. 3.> find max length of subarray with 0 sum.
  101. */
  102.  
  103. int n, k; cin >> n >> k;
  104. vector<int> v(n);
  105. for (int i = 0; i < n; i++) cin >> v[i];
  106.  
  107. cout << check_subarray_0sum(v, n) << " " << endl;//present ->1, not present ->0
  108. //true -> 1, false -> 0
  109.  
  110. cout << "count of subarrays with 0sum -> " << count_subarrays_0sum(v, n) << " " << endl;
  111.  
  112. cout << "max length of subarray with 0 sum -> " << maxlength_subarray_0sum(v, n) << " " << endl;
  113.  
  114.  
  115. /*
  116. given an array of length n,k, a[n];
  117. n<=10^5, a[i]<=10^9
  118. 1.> check whether a subarray with sum k present or not
  119. 2.> count number of subarrays with sum k.
  120. 3.> find max length of subarray with k sum.
  121. */
  122.  
  123.  
  124.  
  125. cout << check_subarray_ksum(v, n, k) << " " << endl; //present ->1, not present ->0
  126. //true -> 1, false -> 0
  127.  
  128. cout << "count of subarrays with ksum -> " << count_subarrays_ksum(v, n, k) << " " << endl;
  129.  
  130. cout << "max length of subarray with k sum -> " << maxlength_subarray_ksum(v, n, k) << " " << endl;
  131.  
  132.  
  133. return 0;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement