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

C++での一致検索


numsと呼ばれる一意の整数のリストがあるとします。標準の二分探索を使用して、まだ正常に検出できる整数の数を検出する必要があります。

したがって、入力が[2,6,4,3,10]の場合、出力は3になります。これは、バイナリ検索を使用して4を検索する場合と同様に、最初に見つけることができます。反復。また、2回の反復後に2と10を見つけることができます。

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

  • 関数help()を定義します。これは、ターゲット、配列、および数値を取ります。

  • 低:=0

  • high:=numsのサイズ-1

  • 低い<=高い間、実行-

    • 中:=低+(高-低)/ 2

    • nums [mid]がターゲットと同じ場合、-

      • trueを返す

    • nums [mid]

      • 低:=中+ 1

    • それ以外の場合

      • 高:=中-1

  • falseを返す

  • メインの方法から、次のようにします-

  • ret:=0

  • numsの各要素iについて

    • ret:=ret + help(i、nums)

  • retを返す

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   bool help(int target, vector<int> & nums) {
      int low = 0;
      int high = nums.size() - 1;
      while (low <= high) {
         int mid = low + (high - low) / 2;
         if (nums[mid] == target)
         return true;
         if (nums[mid] < target) {
            low = mid + 1;
         } else {
            high = mid - 1;
         }
      }
      return false;
   }
   int solve(vector<int> & nums) {
      int ret = 0;
      for (int i : nums) {
         ret += help(i, nums);
      }
      return ret;
   }
};
main() {
   Solution ob;
   vector<int> v = {2,6,4,3,10};
   cout << (ob.solve(v));
}

入力

{2,6,4,3,10}

出力

3

  1. C++での二分木から二分探索木への変換

    二分木 は、ツリーの各ノードが最大2つの子ノードを持つことができる特殊なタイプのツリーです。これらの子ノードは、右の子および左の子と呼ばれます。 単純な二分木は-です 二分探索木(BST) は、次のルールに従う特殊なタイプのツリーです- 左の子ノードの値は常に親よりも小さくなります注 右側の子ノードは、親ノードよりも大きな値を持っています。 すべてのノードが個別に二分探索木を形成します。 二分探索木(BST)の例 − バイナリ検索ツリーは、検索、最小値と最大値の検索などの操作の複雑さを軽減するために作成されます。 ここでは、二分木が与えられており、

  2. C ++プログラムでの二分探索?

    二分探索は、半区間探索、対数探索、または二分探索とも呼ばれ、ソートされた配列内のターゲット値の位置を見つける検索アルゴリズムです。二分探索は、ターゲット値を配列の中央の要素と比較します。それらが等しくない場合、ターゲットが存在できない半分が削除され、残りの半分で検索が続行され、再び中央の要素がターゲット値と比較され、ターゲット値が見つかるまでこれが繰り返されます。残りの半分が空の状態で検索が終了した場合、ターゲットは配列に含まれていません。アイデアは単純ですが、バイナリ検索を正しく実装するには、特に配列の値が範囲内の整数のすべてではない場合、終了条件と中間点の計算に関する微妙な点に注意する必要