Computer >> Máy Tính >  >> Lập trình >> C ++

Subarray Sums Divisible by K trong C ++

Giả sử chúng ta có một mảng A gồm các số nguyên. Chúng ta phải tìm số mảng con không rỗng liền nhau có tổng chia hết cho k. Nếu A =[4,5,0, -2, -3,1] và k =5, thì đầu ra sẽ là 7. Có bảy mảng con. [[4,5,0, -2, -3,1], [5], [5,0], [5,0, -2, -3], [0], [0, -2, - 3], [-2, -3]]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • tạo một bản đồ m và đặt m [0] là 1
  • temp:=0, ans:=0 và n:=kích thước của mảng a
  • cho tôi trong phạm vi từ 0 đến n - 1
    • temp:=temp + a [i]
    • x:=(temp mod k + k) mod k
    • ans:=ans + m [x]
    • tăng m [x] lên 1
  • trả lại ans

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int subarraysDivByK(vector<int>& a, int k) {
      unordered_map <int, int> m;
      m[0] = 1;
      int temp = 0;
      int ans = 0;
      int n = a.size();
      for(int i = 0; i < n; i++){
         temp += a[i];
         int x = (temp % k + k) % k;
         ans += m[x];
         m[x]++;
      }
      return ans;
   }
};
main(){
   vector<int> v = {4,5,0,-2,-3,1};
   Solution ob;
   cout <<(ob.subarraysDivByK(v, 5));
}

Đầu vào

[4,5,0,-2,-3,1]
5

Đầu ra

7