C++ 中对转换后的数组进行排序


假设我们有一个排序好的整数数组 nums 以及整数 a、b 和 c。我们需要将形式为 f(x) = ax^2 + bx + c 的二次函数应用于数组中的每个元素 x。最终的数组必须按排序顺序排列。

因此,如果输入类似于 nums = [-4,-2,2,4],a = 1,b = 3,c = 5,则输出将为 [3,9,15,33]

为了解决这个问题,我们将遵循以下步骤:

  • 定义函数 f(),它接收 x、a、b、c 作为参数:

  • 返回 ax^2 + bx + c

  • 在主方法中执行以下操作:

  • n := nums 的大小

  • start := 0,end := n - 1

  • 定义一个大小为 n 的数组 ret

  • 如果 a >= 0,则:

    • 从 i := n - 1 初始化,当 i >= 0 时,更新 (i 减 1),执行:

      • x := f(nums[start], a, b, c)

      • y := f(nums[end], a, b, c)

      • 如果 x > y,则:

        • (start 加 1)

        • ret[i] := x

      • 否则

        • ret[i] := y

        • (end 减 1)

  • 否则

    • 从 i := 0 初始化,当 i < n 时,更新 (i 加 1),执行:

      • x := f(nums[start], a, b, c)

      • y := f(nums[end], a, b, c)

      • 如果 x < y,则:

        • (start 加 1)

        • ret[i] := x

      • 否则

        • ret[i] := y

        • (end 减 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, ]

更新于: 2020-11-19

199 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告