変換された配列をC++でソートする
整数numと整数値a、b、cのソートされた配列があるとします。配列内の各要素xに、f(x)=ax ^ 2 + bx+cの形式の2次関数を適用する必要があります。そして、最終的な配列はソートされた順序である必要があります。
したがって、入力がnums =[-4、-2,2,4]、a =1、b =3、c =5のような場合、出力は[3,9,15,33]
>これを解決するには、次の手順に従います-
-
x、a、b、c −
を取る関数f()を定義します -
ax ^ 2 + bx+cを返す
-
メインの方法から、次のようにします-
-
n:=numsのサイズ
-
開始:=0、終了:=n-1
-
サイズnの配列retを定義します
-
> =0の場合、-
-
初期化i:=n --1の場合、i> =0の場合、更新(iを1つ減らす)、実行-
-
x:=f(nums [start]、a、b、c)
-
y:=f(nums [end]、a、b、c)
-
x> yの場合、-
-
(開始を1増やします)
-
ret [i]:=x
-
-
それ以外の場合
-
ret [i]:=y
-
(終了を1つ減らします)
-
-
-
-
それ以外の場合
-
初期化i:=0の場合、i
-
x:=f(nums [start]、a、b、c)
-
y:=f(nums [end]、a、b、c)
-
x
-
(開始を1増やします)
-
ret [i]:=x
-
-
それ以外の場合
-
ret [i]:=y
-
(終了を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: int f(int x, int a, int b, int c){ return a * x * x + b * x + c; } vector<int< sortTransformedArray(vector<int<& nums, int a, int b, int c) { int n = nums.size(); int start = 0; int end = n - 1; vector<int< ret(n); if (a >= 0) { for (int i = n - 1; i >= 0; i--) { int x = f(nums[start], a, b, c); int y = f(nums[end], a, b, c); if (x > y) { start++; ret[i] = x; } else { ret[i] = y; end--; } } } else { for (int i = 0; i < n; i++) { int x = f(nums[start], a, b, c); int y = f(nums[end], a, b, c); if (x < y) { start++; ret[i] = x; } else { ret[i] = y; end--; } } } return ret; } }; main(){ Solution ob; vector<int< v = {-4,-2,2,4}; print_vector(ob.sortTransformedArray(v, 1, 3, 5)); }
入力
{-4,-2,2,4}, 1, 3, 5
出力
[3, 9, 15, 33, ]
-
ヒープソートアルゴリズムを使用して10個の要素の配列をソートするC++プログラム
ヒープソートは、バイナリヒープデータ構造に基づいています。バイナリヒープでは、親ノードの子ノードは最大ヒープの場合はそれ以下であり、親ノードの子ノードは最小ヒープの場合はそれ以上です。 ヒープソートのすべてのステップを説明する例は次のとおりです。 並べ替え前の10個の要素を含む元の配列は-です 20 7 1 54 10 15 90 23 77 25 この配列は、max-heapifyを使用してバイナリ最大ヒープに組み込まれています。配列として表されるこの最大ヒープは、次のように与えられます。 90 77 20 54
-
配列をC++関数に渡す
C ++では、配列全体を引数として関数に渡すことはできません。ただし、インデックスなしで配列の名前を指定することにより、配列へのポインタを渡すことができます。 1次元配列を関数の引数として渡したい場合は、次の3つの方法のいずれかで関数の仮パラメーターを宣言する必要があります。3つの宣言メソッドはすべて、整数ポインターが実行されることをコンパイラーに通知するため、同様の結果を生成します。受け取る必要があります。 配列を関数に渡す方法は3つあります- ポインタとしての正式なパラメータ void myFunction(int *param) { // Do so