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

0と1のソートされた配列が与えられた場合、C++で配列の遷移点を見つけます


0と1のみを含むソートされた数値の配列が与えられた場合、遷移点を見つけます。遷移点は、配列に最初に現れる「1」のインデックスです。たとえば、

入力-1

N = 6
arr[ ] = {0,0,0,0,1,1}

出力

4

説明 − 0と1を含む特定の配列では、インデックス「4」の要素の番号が「1」であることがわかります。

入力-2

N = 5
arr[ ] = {0,0,1,1,1}

出力

2

説明 − 0と1を含む指定された配列では、インデックス「2」の要素の番号が「1」であることがわかります。したがって、2を返します。

この問題を解決するためのアプローチ

与えられた整数の配列で、最初の1のインデックスを見つける必要があります。この特定の問題を解決するには、二分探索法を使用して最初の「1」のインデックスを見つけることができます。

  • N個の2進数の配列を入力してください

  • これで、関数transitionPoint(int * arr、int n)は配列を入力とそのサイズとして受け取り、配列に最初に現れる「1」のインデックスを返します。

  • 「0」と「1」として初期化される2つのポインタを低く、高くします。

  • 次に、配列の中点を見つけて、それが「1」であるかどうかを確認します。

  • 配列の中央が「1」の場合はインデックスを返し、そうでない場合は先に進んで確認します。

  • ローポインタをインクリメントして、もう一度「1」を確認します。

  • 「1」が表示されなくなるまで手順を繰り返します。

#include <bits/stdc++.h>
using namespace std;
int transitionPoint(int *arr, int n){
   int low=0;
   int high= n-1;
   while(low<=high){
      int mid = (low+high)/2;
      if(arr[mid]==0)
         low= mid+1;
      else if(arr[mid]==1){
         if(mid==0 || (mid>0 && arr[mid-1]==0))
            return mid;
         high= mid-1;
      }
   }
   return -1;
}
int main(){
   int n= 6;
   int arr[n]= {0,0,0,1,1,1};
   int ans= transitionPoint(arr,n);
   if(ans>=0){
      cout<<"Transition Point is:"<<ans<<endl;
   }
   else{
      cout<<"Not Found"<<endl;
   }
   return 0;
}

出力

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

Transition Point is: 3

指定された配列{0,0,0,1,1,1}には、インデックス「3」に要素「1」が存在するため、出力は「3」として取得されます。


  1. LCMとHCFがC++で与えられたときに他の数を見つけます

    数値Aがあり、LCMとGCDの値があるとすると、別の数値Bを見つける必要があります。A=5、LCMが25、HCF =4の場合、別の数値は4になります。 $$𝐴∗𝐵 =𝐿𝐶𝑀∗𝐻𝐶𝐹$$ $$𝐵=\frac {LCM * HCF} {A} $$ 例 #include <iostream> using namespace std; int anotherNumber(int A, int LCM, int GCD) {    return (LCM * GCD) / A; } int main() {    int A

  2. C++で指定された配列の要素の階乗のGCDを検索します

    N個の要素を持つ配列Aがあるとします。配列のすべての要素の階乗のGCDを見つける必要があります。要素が{3、4、8、6}であるとすると、階乗のGCDは6です。ここでトリックを確認します。 2つの数値のGCDは、両方の数値を除算する最大の数値であるため、2つの数値の階乗のGCDは、最小の数値自体の階乗の値です。だから3の公約数!と5! 3です! =6. 例 #include <iostream> using namespace std; long fact(int n){    if(n <= 1)       return