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

C ++を使用して、1からn-1までの唯一の反復要素を見つけます


この問題では、1からN-1までの値を含むサイズNの順序付けられていない配列arr []が与えられ、1つの値が配列内で2回発生します。私たちのタスクは、1からn-1の間の唯一の反復要素を見つけることです

問題を理解するために例を見てみましょう

入力

arr[] = {3, 5, 4, 1, 2, 1}

出力

1

ソリューションアプローチ

この問題の簡単な解決策は、配列をトラバースし、値ごとに、要素が配列内の別の場所に存在するかどうかを確認することです。二重に出現する値を返します。

例1

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
int findRepValArr(int arr[], int n){
   for(int i = 0; i < n; i++)
   for(int j = i+1; j < n; j++)
   if(arr[i] == arr[j])
      return arr[i];
}
int main(){
   int arr[] = { 5, 3, 2, 6, 6, 1, 4 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The repetitive value in the array is "<<findRepValArr(arr, n);
   return 0;
}

出力

The repetitive value in the array is 6

この問題を解決する別のアプローチは、配列の合計から1から(N-1)までのすべての整数の合計を引くことによって配列の反復値が見つかるという事実を使用することです。

1 st の合計 N-1自然数(S n )=n *(n-1)/ 2

doubleVal =arrSum-(S n

例2

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
int findRepValArr(int arr[], int n){
   int arrSum = 0;
   for(int i = 0; i < n; i++)
      arrSum += arr[i];
   int sn = (((n)*(n-1))/2);
   return arrSum - sn;
}
int main(){
   int arr[] = { 5, 3, 2, 6, 6, 1, 4 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The repetitive value in the array is "<<findRepValArr(arr, n);
   return 0;
}

出力

The repetitive value in the array is 6

  1. C ++でSTLを使用して配列の最大要素を見つける方法は?

    ここでは、最大要素を見つける方法を説明します。したがって、配列が[12、45、74、32、66、96、21、32、27]の場合、max要素は96です。algorithm.hヘッダーファイルにあるmax_element()関数を使用して、最大要素。 例 #include<iostream> #include<algorithm> using namespace std; int main() {    int arr[] = {12, 45, 74, 32, 66, 96, 21, 32, 27};    int n = sizeo

  2. C ++を使用して、配列内の数値の頻度を見つけます。

    配列があるとします。 n個の異なる要素があります。配列内の1つの要素の頻度を確認する必要があります。 A =[5、12、26、5、3、4、15、5、8、4]とすると、5の頻度を見つけようとすると、3になります。 これを解決するために、左から配列をスキャンします。要素が指定された数と同じである場合は、カウンターを増やします。それ以外の場合は、配列がなくなるまで次の要素に進みます。 例 #include<iostream> using namespace std; int countElementInArr(int arr[], int n, int e) {   &nbs