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

C ++を使用して、範囲内で欠落している1つの番号を見つけます


この問題では、サイズnのarr[]が与えられます。私たちのタスクは、範囲内で欠落している1つの番号を見つけることです。 。

配列は、最小値から(最小+ n)までの範囲のすべての値で構成されます。範囲の1つの要素が配列から欠落しています。そして、この不足している値を見つける必要があります。

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

入力

arr[] = {4, 8, 5, 7}

出力

6

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

この問題の簡単な解決策は、配列を並べ替えて欠落している要素を検索し、配列には存在しないが範囲には存在する最小値から始まる範囲の最初の要素を見つけることです。

このソリューションは単純なアプローチであり、O(n log n)時間計算量の問題を解決します。

より短い時間で問題を解決するための別のアプローチは、配列と範囲の値のXORを使用することです。範囲内のすべての値のXORを見つけ、配列のすべての値のXORも見つけます。これら両方の値のXORは、欠落している値になります。

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

#include <bits/stdc++.h>
using namespace std;
int findMissingNumArr(int arr[], int n){
   int arrMin = *min_element(arr, arr+n);
   int numXor = 0;
   int rangeXor = arrMin;
   for (int i = 0; i < n; i++) {
      numXor ^= arr[i];
      arrMin++;
      rangeXor ^= arrMin;
   }
   return numXor ^ rangeXor;
}
int main(){
   int arr[] = { 5, 7, 4, 8, 9};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout<<"The missing value in the array is "<<findMissingNumArr(arr, n);
   return 0;
}

出力

The missing value in the array is 6

  1. C++の等差数列で不足している数を見つけます

    等差数列の要素を順番に表す配列があるとします。 1つの要素が欠落しています。不足している要素を見つける必要があります。したがって、arr =[2、4、8、10、12、14]の場合、6が欠落しているため、出力は6になります。 二分探索を使用して、この問題を解決できます。真ん中の要素に移動し、真ん中と真ん中の隣の違いがdiffと同じかどうかを確認します。そうでない場合は、インデックスmidとmid+1の間に欠落している要素が存在します。真ん中の要素がAPのn/2番目の要素である場合、欠落している要素は右半分にあり、そうでない場合は左半分にあります。 例 #include <iostream

  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