C++で配列サイズを半分に減らします
これを解決するには、次の手順に従います-
-
マップm、n:=arrのサイズを定義し、arrに存在する各要素の頻度をマップmに格納します
-
temp、sz:=n、およびret:=0と呼ばれる配列を定義します
-
キーと値のペアごとに、m
で-
その値をtempに挿入します
-
-
一時配列を並べ替える
-
0からtempのサイズまでの範囲のIの場合
-
sz <=n / 2の場合、ループから抜けます
-
retを1増やします
-
szをtemp[i]
だけ減らします
-
-
retを返す
例(C ++)
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int minSetSize(vector<int>& arr) {
unordered_map <int, int> m;
int n = arr.size();
for(int i = 0; i < n; i++){
m[arr[i]]++;
}
vector <int> temp;
unordered_map <int, int> :: iterator it = m.begin();
int sz = n;
int ret = 0;
while(it != m.end()){
temp.push_back(it->second);
it++;
}
sort(temp.rbegin(), temp.rend());
for(int i = 0; i < temp.size(); i++){
if(sz <= n / 2)break;
ret++;
sz -= temp[i];
}
return ret;
}
};
main(){
vector<int> v = {3,3,3,3,5,5,5,2,2,7};
Solution ob;
cout << (ob.minSetSize(v));
} 入力
[3,3,3,3,5,5,5,2,2,7]
出力
2
-
画像ファイルのサイズを小さくする方法
以前、エクスプローラーの組み込みのメールオプションを使用するか、Windows用のImage Resizerと呼ばれるデスクトッププログラムを使用して、画像ファイルのサイズを縮小する方法についての記事を書きました。これらは良いオプションですが、画像を最適化する方法は他にもいくつかあります。また、多くのWebサイトでペイントを使用するように指示されていますが、画像の見栄えが非常に悪いため、ペイントは適切な方法ではないことがわかりました。 まず、画像のサイズを縮小するために使用されるいくつかの方法では、画像の品質が低下することを理解することが重要です。これは、Webサイトでは問題ない場合がありま
-
C++の迷路
空のスペースと壁のある迷路の中にボールがあるとします。これで、ボールは上、下、左、右などの任意の方向に転がることで空のパスを通過できますが、壁にぶつかるまで転がりが止まりません。ボールが止まると、次の方向を選択できます。 ボールの位置、目的地、迷路を開始し、ボールが目的地に止まるかどうかを確認する必要があります。迷路は1つの2D配列で表されます。ここで、1は壁を示し、0は空きスペースを示します。迷路の境界はすべて壁です。開始座標と宛先座標は、行と列のインデックスで表されます。 したがって、入力が2D配列で表される迷路のようなものである場合 0 0 1 0 0