変換された配列を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