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

バイナリ文字列の0と1の最大差-C++では(O(n)時間)


与えられたタスクは、与えられたバイナリ文字列からサブ文字列を見つけ、次にゼロと1の数の最大差を見つけることです。

例を使用して、私たちがしなければならないことを理解しましょう-

入力

str = “10010110”

出力

2

説明

位置1から4( "0010")までのサブ配列では、ゼロと1の差=3 – 1 =2であり、これは検出可能な最大値です。

入力

str = “00000”

出力

5

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

  • main()関数で、文字列 strを作成します バイナリ文字列を格納します。また、anarray int arrを宣言します [str.length()+ 1];

  • memset(arr、0、sizeof(arr));

    を使用して、arr []=0のすべての要素を設定します。
  • j=1からj<=str.length()

    までループします
  • if(memset(arr、0、sizeof(arr))、そうであれば、arr [j] =max(arr [j-1] -1、-1);

    を入力します。
  • それ以外の場合は、arr [j] =max(arr [j-1] + 1,1);

  • ループの外側では、* max_element(arr + 1、arr + str.length()+ 1);

    を使用して最大数を出力します。

#include<bits/stdc++.h>
using namespace std;
int main(){
   string str = "10010110";
   int arr[str.length()+1];
   memset(arr,0,sizeof(arr));
   for(int j=1;j<=str.length();j++){
      if(str[j-1]=='1')
         arr[j]=max(arr[j-1]-1,-1);
      else
         arr[j]=max(arr[j-1]+1,1);
   }
   cout<<*max_element(arr+1,arr+str.length()+1);
   return 0;
}

出力

2

  1. C++でのノードと祖先の最大の違い

    二分木のルートがあるとすると、異なるノードAとBが存在する最大値Vを見つける必要があります。ここでV =|Aの値–Bの値| AはBの祖先です。したがって、ツリーが-のような場合 その場合、出力は7になります。祖先ノードの違いは[(8-3)、(7-3)、(8-1)、(10-13)]のようになり、その中で(8-1)=7は最大。 これを解決するには、次の手順に従います- 最初にans0を定義します Solve()と呼ばれる1つのメソッドを定義します。これにより、ツリーノードcurrMinとcurrMaxが使用されます。これは次のように機能します- ノードがnullの

  2. C++での関係演算子(==)とstd ::string ::compare()の違い

    関係演算子==とstd::string ::compare()の違いは1つだけです。それが戻り値です。内部的には、string ::operator ==()はstring ::compare()を使用しています 関係演算子(==)は、2つの文字列が等しいかどうかを示すブール値を返し、compareは、文字列の相互関係を示す整数を返します。 ユースケースを詳しく説明するために、compare()は、2つの文字列がたまたま異なっている場合に、2つの文字列が互いにどのように関連するか(小さいか大きいか)に関心がある場合に役立ちます。たとえば、 例 #include <iostream>