C++で所属するグループサイズを指定して人々をグループ化する
IDが0からn-1の範囲にあるn人がいて、各人が正確に1つのグループに属しているとします。長さnの配列groupSizesがあります。この配列は、各人が属するグループサイズ、存在するグループ、および各グループに含まれる人のIDを見つける必要があることを示しています。
入力が− [3,3,3,3,3,1,3]のようであるとすると、出力は[[5]、[0、1、2]、[3、4、6]]、その他可能解は[[2,1,6]、[5]、[0,4,3]]または[[5]、[0,6,2]、[4,3,1]]
になります。これを解決するには、次の手順に従います-
- 1つのマップを作成するm
- 0から指定された配列a–1のサイズまでの範囲のiの場合
- iをm[g[i]] に挿入します
- resと呼ばれる1つのマトリックスを作成します
- マップmの各要素iについて
- 範囲0からiに存在するリストのサイズまでのjの場合
- iの配列のj番目の要素をtempに挿入します
- tempのサイズ=iのキー
- 次に、tempを新しい行としてresに挿入します
- 一時配列をクリアする
- 範囲0からiに存在するリストのサイズまでのjの場合
- 解像度を返します。
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; void print_vector(vector<vector<auto> > v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << "["; for(int j = 0; j <v[i].size(); j++){ cout << v[i][j] << ", "; } cout << "],"; } cout << "]"<<endl; } class Solution { public: vector<vector<int>> groupThePeople(vector<int>& g) { map <int, vector <int> > m; for(int i = 0; i < g.size(); i++){ m[g[i]].push_back(i); } vector < vector <int> > res; map <int, vector <int> > :: iterator i = m.begin(); vector <int> temp; while(i != m.end()){ for(int j = 0; j < i->second.size(); j++){ temp.push_back(i->second[j]); if(temp.size() == i->first){ res.push_back(temp); temp.clear(); } } i++; } return res; } }; main(){ vector<int> v = {3,3,3,3,3,1,3}; Solution ob; print_vector(ob.groupThePeople(v)); }
入力
[3,3,3,3,3,1,3]
出力
[[5, ],[0, 1, 2, ],[3, 4, 6, ],]
-
C++のグリッドで指定された方向に可能な移動をカウントします
サイズnxmのグリッドと開始点x、yを表す2つの変数nとmです。 また、移動((1,1)、(2,2))などとしてグリッド内を移動するために実行できるステップ/移動のペアも指定されます。移動の各ペアは、x、y軸で実行されるステップの単位を表します。目標は、境界[1、n] X [1、m]内のグリッド内をトラバースするために実行できる合計ステップを見つけることです。nが5、mが4、現在の位置が2、2で、選択されたステップが( 1、-1)次に、このステップを1回実行すると、(3,1)になります。このステップを再度実行すると、(4、-1)になります。これは、-1が範囲外であるため無効です。 例
-
C++のMazeIII
空のスペースと壁のある迷路があり、その迷路の中にボールもあるとします。ボールは、上(u)、下(d)、左(l)、または右(r)の方向に転がることで空きスペースを通過できますが、壁にぶつかるまで転がり続けます。ボールが止まると、次の方向を選ぶことができます。その迷路にも1つの穴があります。ボールが穴に転がると、ボールは穴に落ちます。 したがって、ボールの位置、穴の位置、迷路がある場合、最短距離を移動することでボールがどのように穴に落ちるかを調べる必要があります。ここで、距離は、ボールがスタート(除外)からホール(含まれる)まで移動した空きスペースの数によって定義されます。 「u」、「d」、「l