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

C++で有効なサブアレイの数


整数の配列Aがあるとすると、この条件を満たす空でない連続サブ配列の数を見つける必要があります。サブ配列の左端の要素は、サブ配列内の他の要素より大きくありません。

したがって、入力が[1,4,2,5,3]の場合、出力は11になります。これは、11個の有効なサブ配列があるため、[1]、[4]、[2]、[5]のようになります。 ]、[3]、[1,4]、[2,5]、[1,4,2]、[2,5,3]、[1,4,2,5]、[1,4,2 、5,3]。

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

  • ret:=0

  • n:=numsのサイズ

  • 1つのスタックstを定義する

  • 初期化i:=0の場合、i

    • x:=nums [i]

    • (stが空で、x

      • stから要素を削除

    • xをstに挿入

    • ret:=st+retのサイズ

  • retを返す

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int validSubarrays(vector<int>& nums) {
      int ret = 0;
      int n = nums.size();
      stack <int> st;
      for(int i = 0; i < nums.size(); i++){
         int x = nums[i];
         while(!st.empty() && x < st.top()) st.pop();
         st.push(x);
         ret += st.size();
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,4,2,5,3};
   cout << (ob.validSubarrays(v));
}

入力

{1,4,2,5,3}

出力

11

  1. C++五胞体数

    五胞体数は、パスカルの三角形の5番目の数として表されます。ご存知のように、これは5番目の数字です。つまり、パスカルの三角形に少なくとも5つの数字が必要です。したがって、このシリーズの最初の数字は 1 4 6 4 1から始まります。 パスカルの三角形の4行目。したがって、このチュートリアルでは、たとえば、n番目の五胞体数を見つける必要があります Input : 1 Output : 1 Input : 4 Output : 35 次の図から出力を確認できます- この問題については、可能な限り、これは一種のシリーズであるため、ソリューションでこのシリーズのパターンを見つけようと

  2. C++で有効な数独

    数独と呼ばれる9×9のマトリックスを与えたとしましょう。タスクは、指定された数独パターンが有効かどうかを確認することです。 一般的に、数独ボードは次のようになります 数独のルール − すべての行には、1〜9の範囲の数値が含まれています すべての列には、1〜9の範囲の数字が含まれています。 3×3の各ブロックには一意の番号が含まれています。 特定の行に同じ番号を付けることはできません。 特定の列に同じ番号を付けることはできません。 例 入力-1 − sudoku[]=    [["3","5&q