C++の配列内のk個の最強の値
arrと呼ばれる数の配列と整数kがあるとします。 | arr [i] --m |の場合、値arr[j]よりも強いと言われる値arr[i]があります。> | arr [j] --m |ここで、mは配列の中央値です。 | arr [i]--m|の場合| arr [j] --m |と同じである場合、arr [i]> arr [j]の場合、arr[i]はarr[j]よりも強力であると言われます。したがって、配列内で最も強いk値のリストを見つける必要があります。
したがって、入力がarr =[1,2,3,4,5]、k =2の場合、出力は[5,1]になります。これは、中央値が3であり、配列の要素が並べ替えられているためです。最強は[5,1,4,2,3]です。ここで最も強い2つの要素は[5、1]です。 [1、5]も有効です。 |5-3|ですが|1-3|と同じですただし、5> 1であるため、5は1よりも強力です。
これを解決するには、次の手順に従います-
-
配列を並べ替える
-
n:=arrのサイズ
-
m:=arr [(n-1)/ 2]
-
ペアの配列vを定義する
-
i:=0、j:=n-1
-
配列retを定義する
-
kがゼロ以外の場合、反復ごとにkを減らし、-
を実行します。-
x1:=| arr [j]-m |
-
x2:=| arr [i]-m |
-
x1> =x2の場合、-
-
retの最後にarr[j]を挿入します
-
(jを1つ減らします)
-
-
それ以外の場合
-
retの最後にarr[i]を挿入します
-
(iを1増やします)
-
-
-
retを返す
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; void print_vector(vector<int> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: int calc(int x, int m){ return abs(x - m); } vector<int> getStrongest(vector<int>& arr, int k) { sort(arr.begin(), arr.end()); int n = arr.size(); int m = arr[(n - 1) / 2]; vector<pair<int, int> > v; int i = 0; int j = n - 1; vector<int> ret; while (k--) { int x1 = calc(arr[j], m); int x2 = calc(arr[i], m); if (x1 >= x2) { ret.push_back(arr[j]); j--; } else { ret.push_back(arr[i]); i++; } } return ret; } }; main(){ Solution ob; vector<int> v = {1,2,3,4,5}; print_vector(ob.getStrongest(v,2)); }
入力
{1,2,3,4,5},2
出力
[5, 1, ]
-
C++のMazeIII
空のスペースと壁のある迷路があり、その迷路の中にボールもあるとします。ボールは、上(u)、下(d)、左(l)、または右(r)の方向に転がることで空きスペースを通過できますが、壁にぶつかるまで転がり続けます。ボールが止まると、次の方向を選ぶことができます。その迷路にも1つの穴があります。ボールが穴に転がると、ボールは穴に落ちます。 したがって、ボールの位置、穴の位置、迷路がある場合、最短距離を移動することでボールがどのように穴に落ちるかを調べる必要があります。ここで、距離は、ボールがスタート(除外)からホール(含まれる)まで移動した空きスペースの数によって定義されます。 「u」、「d」、「l
-
配列をC++関数に渡す
C ++では、配列全体を引数として関数に渡すことはできません。ただし、インデックスなしで配列の名前を指定することにより、配列へのポインタを渡すことができます。 1次元配列を関数の引数として渡したい場合は、次の3つの方法のいずれかで関数の仮パラメーターを宣言する必要があります。3つの宣言メソッドはすべて、整数ポインターが実行されることをコンパイラーに通知するため、同様の結果を生成します。受け取る必要があります。 配列を関数に渡す方法は3つあります- ポインタとしての正式なパラメータ void myFunction(int *param) { // Do so