C++のバイナリ文字列の0と1の最大差
与えられたタスクは、与えられたバイナリ文字列からサブ文字列を見つけ、次にゼロと1の数の最大差を見つけることです。
例を使用して、私たちがしなければならないことを理解しましょう-
入力
str = “100100110”
出力
2
説明
位置1から5( "00100")までのサブ配列では、ゼロと1の差=4 – 1 =3であり、これは検出可能な最大値です。
入力
str = “00000”
出力
5
以下のプログラムで使用されるアプローチは次のとおりです
-
main()関数で、文字列 strを作成します バイナリ文字列を格納します。また、変数intサイズを初期化して、サイズを格納します。 文字列を取得し、両方をMax()関数に渡します。
-
Max()関数では、最初にOne()関数を呼び出して、すべての要素が1であるかどうかを確認します。
-
bool型のOne()関数を作成し、その中に変数int O=0を作成します。
-
i =0からi
-
ループの外側で、(O ==サイズ)かどうかを確認します。その場合は、trueを返します。
-
One()関数がtrueを返した場合は、Max()関数に戻り、答えとして-1を返します。
-
それ以外の場合は、長さを見つけます。配列を初期化しますinta[100]={0}。
-
i =0からi
-
ループの外側で、別の配列int arr [100] [3]を初期化し、memset(arr、-1、sizeof arr)を使用してそのすべての要素を-1に置き換え、最後にLength(a、str、size、0、0、arr)を呼び出します。
-
Length()関数で、最初に(i> =size)かどうかを確認し、そうであれば、文字列が終了して0を返すことを意味します。
-
次に、(arr [i] [s]!=-1)かどうかを確認します。もしそうなら、それは状態がすでに計算されていることを意味し、arr[i][s]を返します。
-
次に、(s ==0)かどうかを確認します。その場合は、arr [i] [s] =max(a [i] + Length(a、str、size、i + 1、1、arr)、Length(a、str、size、i + 1、0)を返します。 、arr));
-
それ以外の場合は、arr [i] [s] =max(a [i] + Length(a、str、size、i + 1、1、arr)、0);
を返します。
例
#include <bits/stdc++.h> using namespace std; bool One(string str, int size){ int O = 0; for (int i = 0; i < str.size(); i++) O += (str[i] == '1'); return (O == size); } int Length(int a[], string str, int size, int i, int s, int arr[][3]){ // If string is over. if (i >= size) return 0; // If the already calculated. if (arr[i][s] != -1) return arr[i][s]; if (s == 0) return arr[i][s] = max(a[i] + Length(a, str, size, i + 1, 1, arr), Length(a, str, size, i + 1, 0, arr)); else return arr[i][s] = max(a[i] + Length(a, str, size, i + 1, 1, arr), 0); } int Max(string str, int size){ // Checking if all elements are 1 if (One(str, size)) return -1; // Finding length int a[100] = { 0 }; for (int i = 0; i < size; i++) a[i] = (str[i] == '0' ? 1 : -1); int arr[100][3]; memset(arr, -1, sizeof arr); return Length(a, str, size, 0, 0, arr); } // main function int main(){ string str = "100100110"; int size = 9; cout << Max(str, size); return 0; }
出力
3
-
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>