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

すべての操作の後に最小の石を見つけるためのC++コード


n文字の文字列Sがあるとします。文字は「+」または「-」のいずれかになります。石の山があります。n回、山から1つの石を取り出すか、山に1つの石を追加しました。パイルから1つの石を取り出す各操作の前に、パイルは空ではありませんでした。これらの操作を行った後、山に入る可能性のある石の最小数を見つける必要があります。 i番目の操作で石を取った場合、S [i]は「-」に等しく、追加された場合、S[i]は「+」に等しくなります。

したがって、入力がS ="++-++"の場合、出力は3になります。最初に山に0個の石があった場合、操作を行った後、石の数は3に等しくなります。

ステップ

これを解決するには、次の手順に従います-

n := size of S
for initialize i := 0, when i < n, update (increase i by 1), do:
   res := (if S[i] is same as '-', then maximum of res - 1 and 0,
otherwise res + 1)
return res

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
int solve(string S){
   int n = S.size(), res = 0;
   for (int i = 0; i < n; i++)
      res = (S[i] == '-') ? max(res - 1, 0) : res + 1;
   return res;
}
int main(){
   string S = "++-++";
   cout << solve(S) << endl;
}

入力

"++-++"

出力

3

  1. C++で復元した後にすべての可能なIPアドレスを見つけるプログラム

    数字のみの文字列があるとすると、可能なすべての有効なIPアドレスの組み合わせを形成して文字列を復元する必要があります。有効なIPアドレスは、単一のピリオド記号で区切られた正確に4つの整数(各整数は0〜255の範囲)で構成されていることがわかっています。 したがって、入力がip =25525511136の場合、出力は[254.25.40.123、 254.254.0.123]になります。 これを解決するには、次の手順に従います- 関数convertToNum()を定義します。これには、s、start、endが必要です。 num:=0 iを初期化する場合:=開始、i <=終了の場合、更

  2. C++ですべての本を購入するための最小コストを見つける

    n個の要素の配列があるとします。これらはそれらの評価です。次の条件で、すべての本を購入するための最小コストを見つけます- 各本の費用は少なくとも1ドルになります 評価が隣接する本よりも高い場合、本は隣接する(左または右)よりもコストが高くなります。 したがって、たとえば、評価配列が[1、3、4、3、7、1]の場合、出力は10、As 1 + 2 + 3 + 1 + 2 + 1 =10 これを解決するには、LtoRとRtoLという2つの配列を作成し、それらを1で埋める必要があります。次に、次の手順に従います- 左から右にトラバースしてからLtoRを入力し、指定されたアレイの以前の評価を