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

C++のソートされていない配列のk番目に欠落している要素


このチュートリアルでは、指定されたソートされていない配列でk番目に欠落している要素を見つけるプログラムを作成します。

k-thを見つけます 指定されたソートされていない配列で最小から最大まで欠落している数。問題を解決するための手順を見てみましょう。

  • ソートされていないアレイを初期化します。
  • すべての要素をセットに挿入します。
  • 配列から最大要素と最小要素を見つけます。
  • 最小から最大まで繰り返すループを作成し、カウントの変数を維持します。
    • 現在の要素がセットに存在する場合は、カウントを増やします。
    • カウントがkに等しい場合は、iを返します。

コードを見てみましょう。

#include <bits/stdc++.h>
using namespace std;
int findMissingNumber(int arr[], int n, int k) {
   unordered_set<int> numbers;
   int count = 0;
   for (int i = 0; i < n; i++) {
      numbers.insert(arr[i]);
   }
   int max = *max_element(arr, arr + n);
   int min = *min_element(arr, arr + n);
   for (int i = min + 1; i < max; i++) {
      if (numbers.find(i) == numbers.end()) {
         count++;
      }
      if (count == k) {
         return i;
      }
   }
   return -1;
}
int main() {
   int arr[] = { 1, 10, 3, 2, 5 }, n = 5;
   int k = 3;
   cout << findMissingNumber(arr, n, k) << endl;
   return 0;
}

出力

上記のコードを実行すると、次の結果が得られます。

7

結論

チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。


  1. C++のソートされていない配列でk個の最も近い数を検索します

    要素が少ない配列Aがあるとします。配列はソートされていません。他に2つの値Xとkがあります。私たちのタスクは、配列AからXの最も近い要素のk個を見つけることです。要素Xが配列に存在する場合、それは出力に表示されません。 A =[48、50、55、30、39、35、42、45、12、16、53、22、56]およびX =35、k =4の場合、出力は30、39、42、45になります。 。 これを解決するために、ヒープデータ構造を使用します。手順は次のようになります- 最初のk個の要素との差の最大ヒープを1つ作成します k + 1番目の要素から始まるすべての要素について、これらの手順を繰

  2. C++の配列内の各要素のSurpasserCountを検索します

    1つの配列Aが与えられたと仮定します。その配列内の各要素の超過者の数を見つける必要があります。超過者は、現在の要素の配列の右側に存在するより大きな要素です。 A ={2、7、5、3、0、8、1}とすると、超過者は{4、1、1、1、2、0、0}であるため、2の右側には4つの数字があります。 4よりも多く、他の人にも同じルールがあります。解決策は非常に単純で、2つのネストされたループがあり、要素ごとに、超過者をカウントして、別の配列に格納します。 例 #include <iostream> using namespace std; void gerSurpassers(int arr[