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

C++のバスケットにフルーツ


木の列があるとすると、i番目のツリーはタイプtree[i]のフルーツを生成します。任意のツリーから開始して、これらの手順を繰り返し実行できます-

  • この木から1つの果物をバスケットに追加します。チャンスがない場合は、やめてください。
  • 現在のツリーの右側にある次のツリーに移動します。右側に木がない場合は、停止します。

バスケットは2つあり、各バスケットには任意の量の果物を入れることができますが、各バスケットにはそれぞれ1種類の果物のみを入れる必要があります。この手順で収集できる果物の総量を見つける必要がありますか?したがって、ツリーが[0、1、2、2]のような場合、出力は3になります。[1,2,2]を収集できます。最初のツリーから開始すると、[0、 1]

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

  • n:=ツリーサイズ、j:=0、ans:=0
  • 1つのマップを作成するm
  • 0からn–1の範囲のiの場合
    • m[tree[i]]を1増やします
    • mのサイズが>2でj<=iの場合、
      • m[tree[j]]を1つ減らします
      • m [tree [j]] =0の場合、mからtree[j]を削除します
      • jを1増やします
    • ans:=最大i – j+1およびans
  • 回答を返す

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int totalFruit(vector<int>& tree) {
      int n = tree.size();
      int j = 0;
      map <int, int> m;
      int ans = 0;
      for(int i = 0; i < n; i++){
         m[tree[i]] += 1;
         while(m.size() > 2 && j <= i){
            m[tree[j]]--;
            if(m[tree[j]] == 0)m.erase(tree[j]);
            j++;
         }
         ans = max(i - j + 1, ans);
      }
      return ans;
   }
};
main(){
   vector<int> v = {3,3,3,1,2,1,1,2,3,3,4};
   Solution ob;
   cout <<(ob.totalFruit(v));
}

入力

[3,3,3,1,2,1,1,2,3,3,4]

出力

5

  1. C++でボードを正方形にカットするための最小コスト

    コンセプト 長さp、幅qのボードが与えられたとすると、破壊のコストが最小になるように、このボードをp*qの正方形に分割する必要があります。このボードでは、各エッジの切削コストが示されます。一言で言えば、コストが最小になるように、このような一連の切断を選択する必要があります。 例 上記のボードに関して、正方形にカットする最適な方法は-です。 上記の場合の合計最小コストは65です。これは、次の手順を実行して計算され、評価されます。 Initial Value : Total_cost = 0 Total_cost = Total_cost + edge_cost * total_pi

  2. C++のバイナリ検索ツリーに挿入します

    二分探索木があるとします。パラメータとして指定されたノードを使用して挿入操作を実行するメソッドを1つだけ作成する必要があります。手術後も木はBSTのままであることに注意する必要があります。したがって、ツリーが次のような場合- 5を挿入すると、ツリーは-になります。 これを解決するには、次の手順に従います- このメソッドは再帰的です。これはinsert()と呼ばれ、値vを取ります。 rootがnullの場合、指定された値vでノードを作成し、それをrootにします vの場合、 ルートの左側:=insert(ルートの左側、v) ルートの右:=insert(ルートの右、v) ル