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

C ++でネイバーを埋める最小の反復を使用して、配列を1で埋めます


この問題では、0または1のいずれかであるn個の要素で構成される配列arrが与えられます。私たちのタスクは、隣接する配列を埋める最小の反復を使用して、配列を1で埋めることです。

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

入力: arr [] ={0、1、1、0、0、1}

出力: 1

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

この問題を解決するには、1が位置に存在する場合、隣接する2つの0を1に変換できるという事実を知る必要があります。

の場合、arr[i]は1です。
次に、arr[i-1]とarr[i+1]が1に変換されます。

これを使用すると、これらのケースの1つを使用して解決策を見つけることができます-

ケース1: ブロックには、ブロックの開始と終了に1があります。残りのすべての値は0です。ゼロの数を数えます。

反復回数=zeroCount/ 2(カウントが偶数の場合)

反復回数=(zeroCount -1)/ 2(カウントが奇数の場合)

ケース2: ブロックには、ブロックの開始時または終了時に単一の1があり、残りのすべての値は0です。

反復回数=zeroCount

ケース3: ブロックには1がありません。 1を埋めることができないことを示す-1を印刷します。

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

#include<iostream>
using namespace std;

int countIterationFill1(int arr[], int n) {
   
   bool oneFound = false;
   int iterationCount = 0;
   for (int i=0; i<n; ) {
      
      if (arr[i] == 1)
      oneFound = true;
      while (i<n && arr[i]==1)
         i++;
      int zeroCount = 0;
      while (i<n && arr[i]==0) {
         zeroCount++;
         i++;
      }
      if (oneFound == false && i == n)
         return -1;
      int itrCount;
      if (i < n && oneFound == true) {
         
         if (zeroCount & 1 == 0)
            itrCount = zeroCount/2;
         else
            itrCount = (zeroCount+1)/2;
         zeroCount = 0;
      }
      else{
         
         itrCount = zeroCount;
         zeroCount = 0;
      }
      iterationCount = max(iterationCount, itrCount);
   }

   return iterationCount;
}

int main() {
   
   int arr[] = {0, 1, 1, 0, 0, 1, 0, 0, 0, 1};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The number of iterations to fill 1's is "<<countIterationFill1(arr, n);
   return 0;
}

出力-

The number of iterations to fill 1's is 2

  1. C ++の絶対差の合計が最小の配列要素?

    このプログラムは、明確な要素を持つ配列がある場合に、配列の最小絶対差を見つけることです。この概念をよりよく学ぶために、必要なものを再ブラシします。 配列 同じデータ型の要素のコンテナです。配列の長さを事前に定義する必要があります。 絶対差 は、2つの数値の差の絶対値です。つまり、差は常に正であり、負の値は正に変換されます。 各元素の最小絶対差の合計を求める必要があります。最小絶対溶質差の式は次のとおりです。 最小絶対差(a)=min(abs(a – arr [j])); ここで、1 <=j <=nおよびj!=i、 abs は絶対値です。 Input: arr = {1, 3,

  2. 線形検索を使用して配列内の最小要素を検索するC++プログラム

    これは、線形探索アプローチを使用して配列の最小要素を見つけるためのC++プログラムです。このプログラムの時間計算量はO(n)です。 アルゴリズム Begin Assign the data element to an array. Assign the value at ‘0’ index to minimum variable. Compare minimum with other data element sequentially. Swap values if minimum value is more then the value at