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

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


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

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

  • ソートされた配列を初期化します。
  • 2つの変数の差を初期化し、kでカウントします。
  • アレイを反復処理します。
    • 現在の要素が次の要素と等しくない場合。
      • 2つの数値の違いを見つけます。
      • 差がk以上の場合は、現在の要素にカウントを加えたものを返します。
      • それ以外の場合は、カウントから差を引きます。
  • -1を返します。

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

#include <bits/stdc++.h>
using namespace std;
int findMissingNumber(int arr[], int k, int n) {
   int difference, count = k;
   for(int i = 0 ; i < n - 1; i++) {
      if ((arr[i] + 1) != arr[i + 1]) {
         difference = arr[i + 1] - arr[i] - 1;
         if (difference >= count) {
            return arr[i] + count;
         }else {
            count -= difference;
         }
      }
   }
   return -1;
}
int main() {
   int arr[] = { 1, 2, 3, 5, 10 }, n = 5;
   int k = 3;
   cout << findMissingNumber(arr, k, n) << endl;
   return 0;
}

出力

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

7

結論

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


  1. C++でM回連結された配列からK番目の最小要素を見つけます

    配列Aと、さらに2つの整数KとMがあるとします。配列をそれ自体にM回連結した後、K番目の最小要素を見つける必要があります。配列がA=[3、1、2]、K =4、M =3のようであるとすると、Aを3回連結すると、[3、1、2、3、1、2、3、1 、2]、4番目に小さい要素はここでは2です。 この問題を解決するために、配列Aを並べ替えてから、配列のインデックス((K – 1)/ M)にある値を返します。 例 #include<iostream> #include<algorithm> using namespace std; int findKSmallestNumber(

  2. C++でソートされた配列の多数決要素を確認します

    7/2と表示されます。 配列内のxの出現を数えることができ、その数がn / 2より大きい場合、答えはtrueになり、そうでない場合はfalseになります。 例 #include <iostream> #include <stack> using namespace std; bool isMajorityElement(int arr[], int n, int x){    int freq = 0;    for(int i = 0; i<n; i++){       if(arr[i]