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

C++の起源から最も遠い


各文字が「L」、「R」、または「?」のいずれかである文字列sがあるとします。 「L」は1ユニット左に移動したことを意味し、「R」は1ユニット右に移動したことを意味し、「?」 「L」または「R」のいずれかを意味します。位置0にいる場合は、「?」を置き換えて、0から可能な最大距離を見つける必要があります。 「L」または「R」で。

したがって、入力が「LLRRL ??」の場合、出力は3になり、?を置き換えます。 Lを使用して左に5ユニット、右に2ユニット移動するため、最大変位は3です。

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

  • op:=0、l:=0、r:=0

  • sでそれごとに-

    • 'L'と同じ場合、-

      • (lを1増やします)

    • それ以外の場合は「R」と同じ場合、-

      • (rを1増やします)

    • それ以外の場合

      • (opを1増やします)

  • (lとr)の最大値を返す-(lとr)の最小値+ op

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(string s) {
      int op = 0;
      int l = 0;
      int r = 0;
      for (auto &it : s) {
         if (it == 'L') {
            l++;
         } else if (it == 'R') {
            r++;
         } else {
            op++;
         }
      }
      return max(l, r) - min(l, r) + op;
   }
};
main() {
   Solution ob;
   cout << (ob.solve("LLRRL??"));
}
入力
"LLRRL??"

出力

3

  1. C++の2Dマトリックスからリンクリストを作成します

    行列が1つあるとすると、再帰的アプローチを使用して2Dリンクリストに変換する必要があります。 リストには右ポインタと下ポインタがあります。 したがって、入力が次のような場合 10 20 30 40 50 60 70 80 90 出力はになります これを解決するには、次の手順に従います- 関数make_2d_list()を定義します。これは、行列mat、i、j、m、n、を取ります。 iとjが行列の境界にない場合、- nullを返す temp:=値mat [i、j]で新しいノードを作成します 温度

  2. C++でプレオーダートラバーサルからツリーを回復する

    二分木があるとします。二分木のルートで事前注文の深さ優先探索を実行します。 このトラバーサルの各ノードで、出力はD個のダッシュ(ここでDはこのノードの深さ)になり、その後、このノードの値が表示されます。ノードの深さがDであるかどうかはわかっているので、その直接の子の深さはD + 1であり、ルートノードの深さは0です。 ノードに子が1つしかない場合、その子は左の子であることが保証されることを覚えておく必要があります。したがって、このトラバーサルの出力Sが与えられた場合は、ツリーを回復してそのルートを返します。 したがって、入力が「1-2--3--4-5--6--7」の場合、出力は こ