C++での大から小へのソート
整数numのリストがあるとすると、この方法でリストをソートする必要があります-
-
最初の要素は最大です
-
2番目の要素は最小です
-
3番目の要素は2番目の最大値です
-
4番目の要素は2番目の最小値です
など。
したがって、入力が[6,3,10,4]の場合、出力は[10、3、6、4]
になります。これを解決するには、次の手順に従います-
-
配列retを定義する
-
配列番号を並べ替える
-
j:=numsのサイズ-1
-
i:=0
-
i <=jの場合、-
-
retの最後にnums[j]を挿入します
-
(jを1つ減らします)
-
i <=jの場合、-
-
retの最後にnums[i]を挿入します
-
(iを1増やします)
-
-
-
retを返す
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<int> solve(vector<int> & nums) { vector<int> ret; sort(nums.begin(), nums.end()); int j = nums.size() - 1; int i = 0; while (i <= j) { ret.push_back(nums[j]); j--; if (i <= j) { ret.push_back(nums[i]); i++; } } return ret; } }; main() { Solution ob; vector<int> v = {6,3,10,4}; print_vector(ob.solve(v)); }
入力
{6,3,10,4}
出力
10, 3, 6, 4
-
C++でゲームVをジャンプする
arrと呼ばれる整数の配列と整数dがあるとします。 1つのステップで、インデックスiから-にジャンプできます。 i + xここで、i +x
-
C++での3方向マージソート
マージソートでは、配列を再帰的に2つの部分に分割し、ソートして最後にマージします。マージソートの変形は、配列を2つの部分に分割する代わりに、3つの部分に分割する3方向のマージソートとして扱われます。 マージソートは、配列を再帰的にサイズが半分のサブ配列に分解します。同様に、3方向マージソートは配列をサイズの3分の1のサブ配列に分解します。 例 Input : 46, -1, -44, 79, 31, -41, 11, 20 , 74, 94 Output : -44 -41 -1 11 20 31 46 74 79 94 Input : 24, -18 Output : -18 24 3