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

C ++で重複しているソートされた配列で等しい(または中間の)ポイントを検索する


n個の要素を持つ1つのソートされた配列があるとします。配列がソートされます。小さい要素の数が大きい要素の数と同じである配列に要素が存在するかどうかを確認する必要があります。等しい点が配列に複数回出現する場合は、最初に出現したインデックスを返します。そのようなポイントが存在しない場合は、-1を返します。要素がA=[1、1、2、3、3、3、3、3]のようであるとすると、等しい点はインデックス2にあり、要素はA [2]=2です。要素が1で、1つだけ大きい要素、つまり3です。

すべての個別の要素を格納するために、1つの補助配列を作成します。個別の要素の数が偶数の場合、等しい点を見つけることができません。そうでない場合、中央の要素が中点になります。

#include<iostream>
using namespace std;
int searchEqualPoint(int arr[], int n) {
   int aux_arr[n];
   int i = 0, aux_index = 0;
   while (i < n) {
      aux_arr[aux_index++] = i++;
      while (i<n && arr[i] == arr[i-1])
         i++;
   }
   return (aux_index & 1)? aux_arr[aux_index>>1] : -1;
}
int main() {
   int arr[] = {1, 1, 2, 3, 3, 3, 3, 3};
   int n = sizeof(arr)/sizeof(arr[0]);
   int index = searchEqualPoint(arr, n);
   if (index != -1)
      cout << "Equal Point is: " << arr[index];
   else
      cout << "No Equal Point exists";
}

出力

Equal Point is: 2

  1. C ++を使用して、括弧の文字列から等しい点を見つけます。

    ここでは、括弧の文字列で等しいポイントを取得する方法を説明します。等しい点はインデックスIであり、その前の開始ブラケットの数は、その後の終了ブラケットの数と等しくなります。ブラケット文字列が「(()))(()()())))」のようなものであるとすると、よく見ると次のようになります したがって、0から9までの開始ブラケットの数は5であり、9から14までの終了ブラケットの数も5であるため、これは同じポイントです。 この問題を解決するには、次のいくつかの手順に従う必要があります- すべてのインデックスiまでの文字列に表示される開き角かっこの数を保存します すべてのインデックスIまでの文字

  2. C++の配列で最大GCDのペアを検索します

    正の整数の配列があるとします。私たちのタスクは、GCD値が最大である配列から整数のペアを見つけることです。 A ={1、2、3、4、5}とすると、出力は2になります。ペア(2、4)にはGCD 2があり、他のGCD値は2未満です。 この問題を解決するために、各要素の除数の数を格納するためのカウント配列を維持します。除数を数えるプロセスには、O(sqrt(arr [i]))の時間がかかります。全体をトラバースした後、最後のインデックスから最初のインデックスまでカウント配列をトラバースできます。要素が1より大きい値が見つかった場合、これは2つの要素の約数であり、最大GCDでもあることを意味します。