C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でのニースサブアレイの数を数える


整数numsと整数kの配列があるとします。サブアレイは、k個の奇数が存在する場合、ナイスサブアレイと呼ばれます。素敵なサブ配列の数を見つける必要があります。したがって、配列が[1,1,2,1,1]で、k =3の場合、サブ配列は[1,1,2,1]と[1,2,1]であるため、出力は2になります。 、1]

これを解決するには、次の手順に従います-

  • ans:=0、n:=nums配列のサイズ
  • 左:=0、右:=0、カウント:=0
  • 配列を奇数と定義し、これをnumsに存在するすべての奇数値で埋めます
  • 奇数配列の長さが>=kの場合、
    • iが0で、jがk – 1の範囲で奇数– 1のサイズの場合、iとjを1増やします
      • left:=odd [i] + 1(i =0の場合)、それ以外の場合はodd [i] – odd [i – 1]
      • right:=odd [j](奇数のサイズ– 1 =jの場合)、それ以外の場合はodd [j + 1] – odd [j]
      • ans:=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++のCHAR_BIT

    CHAR_BITは、charのビット数です。これは、C++言語の「limits.h」ヘッダーファイルで宣言されています。 1バイトあたり8ビットです。 これがC++言語のCHAR_BITの例です 例 #include <bits/stdc++.h> using namespace std; int main() {    int x = 28;    int a = CHAR_BIT*sizeof(x);    stack<bool> s;    cout << "T

  2. Pythonで素敵なサブアレイの数を数えるプログラム

    numsという配列と別の値kがあるとします。素敵なサブ配列の数を見つける必要があります。サブアレイに奇数がk個ある場合、そのサブアレイは優れたサブアレイであると言われます。 したがって、入力がnums =[1,1,2,1,1]、k =3の場合、2つのサブ配列[1,1,2,1]と[1,2]があるため、出力は2になります。 、1,1]。 これを解決するには、次の手順に従います- odd_i:=新しいリスト 0からnums-1のサイズのiの場合、実行します nums [i] mod 2が1と同じ場合、 odd_iの最後にiを挿入します 開始:=0、終了:=k