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

C++でソートされた配列内の小さい要素または等しい要素の数


整数の配列が与えられます。目標は、指定された値K以下の配列の要素の数を見つけることです。

入力

Arr[]= { 1, 2, 3, 14, 50, 69, 90 } K=12

出力

Numbers smaller or equal to K: 3

説明

Numbers 1,2,3 is smaller or equal to 12.

入力

Arr[]= { 12, 13, 13, 13, 14, 50, 54, 100 } K=14

出力

Numbers smaller or equal to K: 5

説明

Numbers 12, 13, 14 are smaller or equal to 14.

ナイーブアプローチ

以下のプログラムで使用されているアプローチは次のとおりです

  • 整数配列Arr[]とKを取ります。

  • 関数smallorEqual(int arr []、int k、int len)は、K

    以下のarr[]の要素の数を返します。
  • このような数値の場合、初期変数カウントを0とします。

  • forループを使用して数値の配列をトラバースします。 i=0からi

  • ここで、arr [i]ごとに、<=kの場合、カウントをインクリメントします。

  • 終了時に、ループカウントは条件を満たす総数になります。

  • 結果としてカウントを返します。

#include <bits/stdc++.h>
using namespace std;
int smallorEqual(int arr[],int k,int len){
   int count = 0;
   for (int i = 0; i < len; i++){
      if(arr[i]<=k)
         { count++; }
      else
         { break; }
   }
   return count;
}
int main(){
   int Arr[] = { 1,5,11,12,19,21,32,53,70,100 };
   int K = 21;
   int Length= sizeof(Arr)/sizeof(Arr[0]);
   cout <<"Numbers smaller or equal to K: "<<smallorEqual(Arr,K,Length);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Numbers smaller or equal to K: 6

効率的なアプローチ(二分探索を使用)

以下のプログラムで使用されているアプローチは次のとおりです

  • 整数配列Arr[]とKを取ります。

  • 関数binarySearch(int arr []、int k、int len)は、K

    以下のarr[]の要素の数を返します。
  • インデックスをlow=0、high =len-1、mid =(low + high)/ 2; / p>

    とします。
  • 変数index=-1;

    を取る
  • whileループを使用して、low <=high

    まで
  • arr[mid]の値を確認してください。 <=kの場合。次に、index=midです。新しいlow=mid + 1

  • それ以外の場合は、新しいhigh=mid-1。

  • whileループのインデックスの最後に、最後の番号のインデックスが作成されます<=k。

  • 配列のインデックス付けは0から始まり、インデックス0からインデックスまでのすべての数値がk未満であるため、結果としてインデックス+1を返します。

#include <bits/stdc++.h>
using namespace std;
int binarySearch(int arr[],int k,int len){
   int low = 0;
   int high = len -1;
   int mid = (high+low)/2;
   int index = -1;
   while(low <= high){
      mid =( low + high ) / 2;
      if(arr[mid] <= k){
         index = mid;
         low = mid+1;
      }
      else{
         high=mid-1;
      }
   }
   return (index+1);
}
int main(){
   int Arr[] = { 1,5,11,12,19,21,32,53,70,100 };
   int K = 21;
   int Length= sizeof(Arr)/sizeof(Arr[0]);
   cout <<"Numbers smaller or equal to K: "<<binarySearch(Arr,K,Length);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Numbers smaller or equal to K: 6

  1. C++ですべての配列要素を等しくするために必要な最小限の操作

    問題の説明 n個の正の整数を持つ配列が与えられます。すべての要素を等しくするために、操作の最小数を見つける必要があります。配列要素の任意の要素を使用して、加算、乗算、減算、または除算を実行できます。 例 入力配列が=1、2、3、4}の場合、すべての要素を等しくするには、最低3つの操作が必要です。たとえば、3つの追加を行うことで要素4を作成できます。 アルゴリズム 1. Select element with maximum frequency. Let us call it ‘x’ 2. Now we have to perform n-x operations

  2. C++のRotatedSorted配列でRotationCountを検索します

    回転してソートされた配列である配列があるとします。配列をソートするために必要な回転数を見つける必要があります。 (右から左への回転を検討します。) 配列が{15、17、1、2、6、11}のようであるとすると、配列を2回回転させて並べ替える必要があります。最終的な注文は{1、2、6、11、15、17}になります。ここでの出力は2です。 ロジックは単純です。気づいたら、回転数が最小要素のインデックスの値と同じであることがわかります。したがって、最小の要素を取得すると、そのインデックスが結果になります。 例 #include <iostream> using namespace st