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

C++で2つの数値間の最小距離を見つける


ソートされていない配列Aが1つ、数値xとyが2つあるとします。 Aでxとyの間の最小距離を見つける必要があります。配列には重複する要素を含めることもできます。したがって、配列がA =[2、5、3、5、4、4、2、3]、x =3、y =2の場合、3と2の間の最小距離は1になります。

これを解決するには、次の手順に従う必要があります

  • 配列を左から右にトラバースし、xまたはyのいずれかが見つかった場合は停止します。次に、その位置のインデックスをprevに保存します
  • ここで、インデックスprevの後に配列をトラバースします。現在のインデックスiの要素がxまたはyのいずれかと一致する場合は、A [prev]と異なるかどうかを確認し、異なる場合は、必要に応じて最小インデックスを更新します。 、それが異なる場合は、prevをprev:=i
  • として更新します。

#include<iostream>
using namespace std;
int findMinDistance(int A[], int n, int x, int y) {
   int i = 0;
   int distance = INT_MAX;
   int prev_index;
   for (i = 0; i < n; i++) {
      if (A[i] == x || A[i] == y) {
         prev_index = i;
         break;
      }
   }
   while (i < n) {
      if (A[i] == x || A[i] == y) {
         if ( A[prev_index] != A[i] && (i - prev_index) < distance ){
            distance = i - prev_index;
            prev_index = i;
         } else
            prev_index = i;
      }
      i++;
   }
   return distance;
}
int main() {
   int arr[] = {2, 5, 3, 5, 4, 4, 2, 3};
   int n = sizeof(arr) / sizeof(arr[0]);
   int x = 3;
   int y = 2;
   cout << "Minimum distance between " << x << " and " << y << " is: "<< findMinDistance(arr, n, x, y);
}

出力

Minimum distance between 3 and 2 is: 1

  1. 二分木の2つのノード間の距離を見つけるためのクエリ– C ++のO(logn)メソッド

    この問題では、二分木が与えられ、Qクエリが与えられます。私たちのタスクは、クエリを解決してバイナリツリーの2つのノード間の距離を見つけるプログラムを作成することです– C ++のO(logn)メソッド。 問題の説明 各クエリでは、バイナリツリーの2つのノードが与えられ、2つのノード間の距離、つまり、別のノードから1つのノードに到達するために通過するエッジの数を見つける必要があります。 問題を理解するために例を見てみましょう 入力 :二分木 クエリ=3 [2、6] [4、1] [5、3] 出力: 3、2、3 ソリューションアプローチ この問題を解決するために、最

  2. C++で二分木の2つのノード間の距離を見つける

    ノードが少ない二分木があると考えてください。 2つのノードuとvの間の距離を見つける必要があります。ツリーが次のようになっていると仮定します- これで、(4、6)=4の間の距離、パスの長さは4、(5、8)の間の長さ=5などになります。 この問題を解決するために、LCA(Lowest Common Ancestor)を見つけてから、LCAから2つのノードまでの距離を計算します。 例 #include<iostream> using namespace std; class Node {    public:       in