কম্পিউটার টিউটোরিয়াল

সি++-এ বাইনারি সাবঅ্যারে উইথ সম (Binary Subarrays With Sum)


একটি ০ এবং ১ দিয়ে গঠিত অ্যারে A দেওয়া আছে, আমাদের কতগুলো নন-এম্পটি সাবঅ্যারের যোগফল S তা খুঁজে বের করতে হবে। ইনপুট [1,0,1,0,1], S = 2 হলে ফলাফল ৪। সাবঅ্যারগুলো হল [1,0,1,0,1], [1,0,1,0,1], [1,0,1,0,1], [1,0,1,0,1]।

এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব -

  • atMost() নামে একটি মেথড সংজ্ঞায়িত করুন, যা অ্যারে A এবং পূর্ণসংখ্যা x নেবে

  • যদি x < 0 হয়, ০ রিটার্ন করুন, j := 0, ret := 0 সেট করুন

  • i = 0 থেকে A.size()-1 পর্যন্ত লুপ চালান

    • x := x - A[i]

    • যখন x < 0

      • x := x + A[j], j++

    • ret := ret + i - j + 1

  • ret রিটার্ন করুন

  • মেইন মেথড থেকে - ret := atMost(A, S) - atMost(A, S-1)

  • ret রিটার্ন করুন

নিচের বাস্তবায়নটি দেখে আরও ভালো বুঝতে পারবেন -

উদাহরণ

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int atMost(vector <int>& A, int x){       if(x < 0) return 0;       int j = 0;       int ret = 0;       for(int i = 0; i < A.size(); i++){          x -= A[i];          while(x < 0){             x += A[j];             j++;          }          ret += i - j + 1;       }       return ret;    }    int numSubarraysWithSum(vector<int>& A, int S) {       return atMost(A, S) - atMost(A, S - 1);    } }; main(){    vector<int> v1 = {1,0,1,0,1};    Solution ob;    cout << (ob.numSubarraysWithSum(v1, 2)); }

ইনপুট

[1,0,1,0,1]

আউটপুট

4

  1. বাইনারি ট্রিতে সর্বোচ্চ লেভেল সম বের করা C++-তে

  2. C++-এ বাইনারি ট্রির সর্বোচ্চ লেভেল সম

  3. C++-এ বাইনারি ট্রিতে সর্বোচ্চ স্পাইরাল যোগফল

  4. শূন্য সম যোগফল वाले সব সাবঅ্যারে প্রিন্ট করা C++-তে