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

C++のリストnumsからトリプレットnums[i]

numsという数のリストがあるとすると、i

したがって、入力がnums =[2、12、1、4、4]のような場合、2 <4 <12.

であるため、[2、12、4]が基準に一致するため、出力はTrueになります。

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

  • n:=numsのサイズ

  • サイズnの左側の配列を定義します

  • left [0]:=nums [0]

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

    • left [i]:=最小nums[i]およびleft[i-1]

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

  • 初期化i:=n -1の場合、i> =1の場合、更新(iを1つ減らします)、実行-

    • x:=left [i-1]

    • stが空ではなく、stの先頭が<=xの場合、-

      を実行します。
      • stからポップ

    • stが空でなく、xstの先頭の場合、-

      • trueを返す

    • nums[i]をstにプッシュ

  • falseを返す

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   bool solve(vector<int>& nums) {
      int n = nums.size();
      vector<int> left(n);
      left[0] = nums[0];
      for (int i = 1; i < n; i++) {
         left[i] = min(nums[i], left[i - 1]);
      }
      stack<int> st;
      for (int i = n - 1; i >= 1; i--) {
         int x = left[i - 1];
         while (!st.empty() && st.top() <= x)
            st.pop();
         if (!st.empty() && x < nums[i] && nums[i] > st.top())
            return true;
         st.push(nums[i]);
      }
      return false;
   }
};
bool solve(vector<int>& nums) {
   return (new Solution())->solve(nums);
}
int main(){
   vector<int> v = {2, 12, 1, 4, 4};
   cout << solve(v);
}

入力

{2, 12, 1, 4, 4}

出力

1

  1. C++で二重リンクリストのサイズを見つけるプログラム

    この問題では、二重にリンクされたリストが与えられます。私たちのタスクは、C++で二重リンクリストのサイズを見つけるプログラムを作成することです。 二重リンクリストは特殊なタイプのリンクリストであり、単一リンクリストと比較して、順方向と逆方向の両方の方法で簡単にナビゲーションできます。以下は、二重リンクリストの概念を理解するための重要な用語です。 リンク-リンクリストの各リンクには、要素と呼ばれるデータを格納できます。 次へ-リンクリストの各リンクには、次と呼ばれる次のリンクへのリンクが含まれています。 前-リンクリストの各リンクには、前と呼ばれる前のリンクへのリンクが含ま

  2. Pythonの数のリストから算術サブシーケンスの数を見つけるプログラム?

    numsと呼ばれる数のリストがあるとすると、長さが3以上の算術サブシーケンスの数を見つける必要があります。等差数列は、ある数と次の数の差が同じである数のリストです。 したがって、入力がnums =[6、12、13、8、10、14]のような場合、[6、8、10]、[6、10、14]のようなサブシーケンスがあるため、出力は3になります。 ]、[12、13、14]。 これを解決するには、次の手順に従います。 dp:=新しいマップ n:=numsのサイズ res:=0 0からnの範囲のiの場合、実行 0からiの範囲のjについては、次のようにします diff:=