C++でのニースサブアレイの数を数える
これを解決するには、次の手順に従います-
- 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+左*右
- iが0で、jがk – 1の範囲で奇数– 1のサイズの場合、iとjを1増やします
- 回答を返す
例(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
-
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
-
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