C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. ヒープソートアルゴリズムを使用して10個の要素の配列をソートするC++プログラム

    ヒープソートは、バイナリヒープデータ構造に基づいています。バイナリヒープでは、親ノードの子ノードは最大ヒープの場合はそれ以下であり、親ノードの子ノードは最小ヒープの場合はそれ以上です。 ヒープソートのすべてのステップを説明する例は次のとおりです。 並べ替え前の10個の要素を含む元の配列は-です 20 7 1 54 10 15 90 23 77 25 この配列は、max-heapifyを使用してバイナリ最大ヒープに組み込まれています。配列として表されるこの最大ヒープは、次のように与えられます。 90 77 20 54

  2. 配列をC++関数に渡す

    C ++では、配列全体を引数として関数に渡すことはできません。ただし、インデックスなしで配列の名前を指定することにより、配列へのポインタを渡すことができます。 1次元配列を関数の引数として渡したい場合は、次の3つの方法のいずれかで関数の仮パラメーターを宣言する必要があります。3つの宣言メソッドはすべて、整数ポインターが実行されることをコンパイラーに通知するため、同様の結果を生成します。受け取る必要があります。 配列を関数に渡す方法は3つあります- ポインタとしての正式なパラメータ void myFunction(int *param) {    // Do so