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

C++で挿入位置を検索


ソートされた配列arrとターゲット値があるとすると、ターゲットが見つかったときにインデックスを見つける必要があります。それが存在しない場合は、順番に挿入された場合のインデックスを返します。

したがって、入力が[1,3,4,6,6]のようで、target =5の場合、インデックス3に5を挿入できるため、出力は3になり、配列は[1,3、 4,5,6,6]

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

  • n:=Aのサイズ

  • n <1の場合、-

    • 0を返す

  • 低:=0、高:=n-1

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

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

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

      • 途中で戻る

    • それ以外の場合、A [mid]>ターゲットの場合、-

      • high:=mid-1、pos:=mid

    • それ以外の場合

      • low:=mid + 1、pos:=mid + 1

  • 戻り値

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int searchInsert(vector<int>& A, int target) {
      int n = A.size();
      if(n < 1) {
         return 0;
      }
      int low = 0;
      int high = n-1;
      int mid;
      int pos;
      while(low <= high) {
         mid = low + (high-low)/2;
         if(A[mid] == target) {
            return mid;
         }
         else if(A[mid] > target) {
            high = mid - 1;
            pos = mid;
         }
         else {
            low = mid + 1;
            pos = mid + 1;
         }
      }
      return pos;
   }
};
main(){
   Solution ob;
   vector<int&g; v = {1,3,4,6,6};
   cout << (ob.searchInsert(v,5));
}

入力

{1,3,4,6,6},5

出力

3

  1. C / C ++の2-3ツリー(検索と挿入)?

    2-3ツリーは、ツリーデータ構造として定義され、子を持つすべてのノード(内部ノード)には、2つの子(2ノード)と1つのデータ要素、または3つの子(3ノード)と2つのデータがあります。要素。 定義 1つのデータ要素と2つの子がある場合、内部ノードは2ノードと呼ばれます。 2つのデータ要素と3つの子がある場合、内部ノードは3ノードと呼ばれます。 次のステートメントのいずれかが満たされる場合に限り、Tは2-3ツリーと呼ばれます- Tは空または空です。つまり、Tにはノードが含まれていません。 Tは、データ要素aを備えた2ノードです。 Tが子Lと右子Rを残した場合、次のように結

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

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