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

C++-এ নাইস সাবঅ্যারে গণনা


মনে করুন একটি পূর্ণসংখ্যার অ্যারে `nums` এবং একটি পূর্ণসংখ্যা `k` আছে। একটি সাবঅ্যারে "নাইস সাবঅ্যারে" বলা হয় যদি সেটিতে ঠিক `k`টি অড্ড নম্বর থাকে। আমাদের নাইস সাবঅ্যারেগুলোর সংখ্যা বের করতে হবে। যদি অ্যারে `[1,1,2,1,1]` হয় এবং `k = 3`, তবে আউটপুট হবে ২, কারণ সাবঅ্যারেগুলো হলো `[1,1,2,1]`, এবং `[1,2,1,1]`।

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

  • `ans := 0`, `n := nums` অ্যারের আকার
  • `left := 0` এবং `right := 0`, এবং `count := 0`
  • `odd` নামক একটি অ্যারে সংজ্ঞায়িত করুন, এটিকে `nums`-এ উপস্থিত সব অড্ড ভ্যালু দিয়ে ফিল করুন
  • যদি `odd` অ্যারের লেন্থ `>= k` হয়, তবে
    • `i` = 0 এবং `j` = `k-1` থেকে `odd`-এর আকার - 1 পর্যন্ত, `i` এবং `j` বাড়ান
      • `left := odd[i] + 1` যদি `i = 0`, অন্যথায় `odd[i] - odd[i-1]`
      • `right := odd[j]` যদি `odd`-এর আকার - 1 = `j`, অন্যথায় `odd[j+1] - odd[j]`
      • `ans := ans + left * right`
  • `ans` রিটার্ন করুন

উদাহরণ (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++-এ একটি সংখ্যার প্রাইমোরিয়াল (Primorial)

  2. C++-এ অ্যারিথমেটিক নম্বর

  3. C++-এ CHAR_BIT

  4. পাইথনে নাইস সাবঅ্যারে গণনা করার প্রোগ্রাম