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