কম্পিউটার

C++-এ চমৎকার সাবরে-এর সংখ্যা গণনা করুন


ধরুন আমাদের কাছে পূর্ণসংখ্যার সংখ্যা এবং একটি পূর্ণসংখ্যা k আছে। একটি সাবয়ারেকে চমৎকার সাবয়ারে বলা হয় যদি তাতে k বিজোড় সংখ্যা থাকে। আমাদের চমৎকার সাব-অ্যারের সংখ্যা খুঁজে বের করতে হবে। সুতরাং যদি অ্যারে হয় [1,1,2,1,1], এবং k =3, তাহলে আউটপুট হবে 2, যেমন সাবয়ারে [1,1,2,1], এবং [1,2,1 ,1]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • উত্তর :=0, n :=সংখ্যা অ্যারের আকার
  • বাম :=0 এবং ডানে :=0, এবং গণনা :=0
  • একটি অ্যারে বিজোড় সংজ্ঞায়িত করুন, সংখ্যায় উপস্থিত সমস্ত বিজোড় মান দিয়ে এটি পূরণ করুন
  • যদি বিজোড় অ্যারের দৈর্ঘ্য হয়>=k, তাহলে
    • এর জন্য i হল 0 এবং j রেঞ্জ k – 1 থেকে বিজোড় – 1 এর আকার, i এবং j 1 দ্বারা বাড়ান
      • বাম:=বিজোড়[i] + 1 যদি i =0, অন্যথায় বিজোড়[i] – বিজোড়[i – 1]
      • ডান:=বিজোড়[j] যদি বিজোড়ের আকার – 1 =j, অন্যথায় বিজোড়[j + 1] – বিজোড়[j]
      • উত্তর :=উত্তর + বাম * ডান
  • উত্তর ফেরত দিন

উদাহরণ(C++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int numberOfSubarrays(vector<int>& nums, int k) {
      int ans = 0;
      int n = nums.size();
      int left = 0;
      int right = 0;
      int cnt = 0;
      vector <int> odd;
      for(int i = 0; i < n; i++){
         if(nums[i] % 2 == 1)odd.push_back(i);
      }
      if(odd.size()>=k){
         for(int i = 0, j = k-1; j < odd.size(); i++, j++){
            int left = i==0?odd[i]+1: odd[i] - odd[i-1];
            int right = j==odd.size()-1 ?n-odd[j] : odd[j+1] - odd[j];
            ans += left * right;
         }
      }
      return ans;
   }
};
main(){
   vector<int> v = {1,1,2,1,1};
   Solution ob;
   cout <<ob.numberOfSubarrays(v, 3);
}

ইনপুট

[1,1,2,1,1]
3

আউটপুট

2

  1. C++ এ একটি সংখ্যার আদিম

  2. C++ এ পাটিগণিত সংখ্যা

  3. C++ এ CHAR_BIT

  4. পাইথনে চমৎকার সাবয়ারের সংখ্যা গণনা করার প্রোগ্রাম