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

C++でK未満のサブアレイ製品


正の整数numsの配列を指定したとします。サブアレイ内の各要素の積がk未満である(連続した)サブアレイの数をカウントして出力する必要があります。したがって、入力が[10,5,2,6]でk:=100の場合、出力は8になります。したがって、サブ配列は[[10]、[5]、[2]、[6]、 [10、5]、[5、2]、[2、6]、[5、2、6]]

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

  • temp:=1、j:=0およびans:=0
  • 0から配列のサイズまでの範囲のiの場合
    • temp:=temp * nums [i]
    • temp> =kおよびj<=iの場合、do
      • temp:=temp / nums [j]
      • jを1増やします
    • ans:=ans +(i – j + 1)
  • 回答を返す

例(C ++)

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
   int numSubarrayProductLessThanK(vector<int>& nums, int k) {
      lli temp = 1;
      int j = 0;
      int ans = 0;
      for(int i = 0; i < nums.size(); i++){
         temp *= nums[i];
         while(temp >= k && j <= i) {
            temp /= nums[j];
            j++;
         }
         ans += (i - j + 1);
      }
      return ans;
   }
};
main(){
   Solution ob;
   vector<int> v = {10,5,2,6};
   cout << (ob.numSubarrayProductLessThanK(v, 100));
}

入力

[10,5,2,6]
100

出力

8

  1. C++でn以下のすべての階乗数を検索します

    ここでは、n以下のすべての階乗数を出力する方法を説明します。数値Nは、正の数の階乗である場合、階乗数と呼ばれます。したがって、いくつかの階乗数は1、2、6、24、120です。 階乗数を印刷するために、階乗を直接見つける必要はありません。 i =1から始めて、階乗*iを出力します。最初は階乗は1です。理解を深めるためにコードを見てみましょう。 例 #include <iostream> using namespace std; void getFactorialNumbers(int n) {    int fact = 1;    int

  2. C ++の製品配列パズル(O(1)スペース)?

    ここでは、配列に関連する1つの興味深い問題を確認します。 n個の要素を持つ配列があります。 n個の要素の別の配列を作成する必要があります。ただし、2番目の配列のi番目の位置は、i番目の要素を除く最初の配列のすべての要素の積を保持します。そして、1つの制約は、この問題では除算演算子を使用できないことです。追加のスペースを使用せずに、この問題をインプレースで解決する必要があります。 除算、演算を使用できれば、すべての要素の積を取得し、最初の配列のi番目の要素を除算して、2番目の配列のi番目の場所に格納することで、この問題を簡単に解決できます。 ここでは、1つの一時変数、つまり左部分と右部分の積