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

C++で指定されたn個の範囲でk番目に小さい要素を検索します


この問題では、n個の範囲と整数kが与えられます。私たちのタスクは、指定されたn個の範囲でk番目に小さい要素を見つけることです。

範囲を組み合わせた後に作成された配列から、k番目に小さい要素を見つける必要があります。

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

入力: 範囲={{2、5}、{7、9}、{12、15}}、k =9

出力: 13

説明:

作成される配列は{2、3、4、5、7、8、9、12、13、14、15}

です。

最小の要素は13です

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

この問題の簡単な解決策は、すべての範囲から配列を作成することです。配列は範囲から作成されるため、昇順で並べ替えられます。したがって、配列のk番目の値を見つける必要があります。

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

#include <iostream>
using namespace std;

int main(){
   
   int arr[][2] = {{2, 5}, {7, 9}, {12, 15}};
   int n = sizeof(arr)/sizeof(arr[0]);
   int k = 9;

   int rangeArr[1000];
   int size = 0;
   for(int i = 0; i < n; i++)
      for(int j = arr[i][0]; j <= arr[i][1]; j++) {
         rangeArr[size] = j;  
         size++;
      }
   if(k < size)
      cout<<k<<"th smallest element of the ranged array is "<<rangeArr[k]<<endl;
   else
      cout<<"invalid Index";
   return 0;
}

出力

9th smallest element of the ranged array is 13

  1. C ++のBST(BSTの順序統計量)でk番目に小さい要素を検索します

    二分探索木があり、入力として値Kがあるとすると、ツリー内でK番目に小さい要素を見つける必要があります。 したがって、入力が次のような場合 k =3の場合、出力は15になります。 これを解決するには、次の手順に従います- 関数find_kth_smallest()を定義します。これは、root、count、k、を取ります。 ルートがNULLの場合、- NULLを返す left =find_kth_smallest(rootの左側、カウント、k) leftがNULLでない場合、- 左に戻る (カウントを1つ増やします) count

  2. 配列を分割する方法でk番目に小さい要素を見つけるC++プログラム

    配列を分割する方法でk番目に小さい要素を見つけるC++プログラムを開発します。 アルゴリズム Begin    Function CreatePartition() has an array a, and the lower l and upper limit h as arguments    in := l and pi := h    for i in range l to h, do       if a[i] < a[pi], then