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

C++を使用してゼロの数を見つけます


この問題では、0と1のみで構成されるバイナリ配列bin[]が与えられます。私たちのタスクは、ゼロの数を見つけることです。 。

配列は並べ替えられます。つまり、すべての0は1の後に一緒に配置されます。

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

入力

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

出力

4

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

この問題の簡単な解決策は、配列が並べ替えられているという事実を使用することです。つまり、配列内の0の数は、配列内で最初に出現する0を使用して見つけることができます。最初の発生後と同様に、すべての値はゼロになります。

配列内で最初に出現する0を見つけるため。検索アルゴリズムを使用できます。

線形探索-最初の0の線形探索では、最初の0が検出されなくなるまで配列全体をトラバースし、配列の最初の出現とサイズを使用してカウントを返します。このソリューションを使用して、問題の時間計算量をO(N)にします。

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

#include <iostream>
using namespace std;
int findFirstZero(int arr[], int n){
   for(int i = 0; i < n; i++){
      if(arr[i] == 0){
         return i;
      }
   }
   return -1;
}
int countZerosArr(int arr[], int n){
   int firstOccZero = findFirstZero(arr, n);
   if (firstOccZero == -1)
      return 0;
      return (n - firstOccZero);
   }
int main(){
   int arr[] = {1, 1, 1, 1, 0, 0, 0, 0, 0};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The count of zeros in array is "<<countZerosArr(arr, n);
   return 0;
}

出力

The count of zeros in array is 5

二分探索-二分探索では、midの要素が1であるか0であるかに基づいて配列のセクションを分割することにより、最初の0を見つけます。そして0の最初の出現のインデックスを返します。

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

#include <iostream>
using namespace std;
int findFirstZero(int arr[], int start, int end){
   if (end >= start){
      int mid = start + (end - start) / 2;
      if ((mid == 0 || arr[mid - 1] == 1) && arr[mid] == 0)
         return mid;
      if (arr[mid] == 1)
         return findFirstZero(arr, (mid + 1), end);
      else
         return findFirstZero(arr, start, (mid -1));
   }
   return -1;
}
int countZerosArr(int arr[], int n){
   int firstOccZero = findFirstZero(arr, 0, n - 1);
   if (firstOccZero == -1)
      return 0;
      return (n - firstOccZero);
}
int main(){
   int arr[] = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The count of zeros in array is "<<countZerosArr(arr, n);
   return 0;
}

出力

The count of zeros in array is 7

  1. C++を使用して文字列の部分文字列の数を見つける

    この記事では、特定の文字列に形成できるサブ文字列(空ではない)の数を見つけるためのアプローチについて学習します。 Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, ‘oo’, ‘on’, ‘moo’, ‘oon’ and &

  2. C++を使用して停止ステーションの数を見つける

    ポイントXとYの間にn個の中間駅があります。2つの駅が隣接しないように、s駅に停車するように列車を配置できるさまざまな方法の数を数えます。そのため、この記事では、停車駅の数を見つけるためのあらゆる可能なアプローチについて説明します。問題を見ると、sの駅数で列車を止めることができる組み合わせを見つける必要があることがわかります。 問題を解決するためのアプローチ 中間駅が8つあり、3つの中間駅で電車を止める方法を見つける必要がある例を見てみましょう。 n = 8, s = 3 (n-s)、つまり電車が止まらない駅が5つ残っています 電車が止まらないA、B、C、D、Eの5つの駅があります