정수 숫자와 정수 값 a, b 및 c의 정렬된 배열이 있다고 가정합니다. f(x) =ax^2 + bx + c 형식의 2차 함수를 배열의 각 요소 x에 적용해야 합니다. 그리고 최종 배열은 정렬된 순서여야 합니다.
따라서 입력이 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 :=숫자 크기
-
시작 :=0, 종료 :=n - 1
-
n
크기의 배열 ret 정의 -
a>=0이면 -
-
초기화 i :=n - 1의 경우, i>=0일 때 업데이트(i를 1만큼 감소), −
-
x :=f(nums[시작], a, b, c)
-
y :=f(nums[end], a, b, c)
-
x> y이면 -
-
(시작을 1씩 증가)
-
ret[i] :=x
-
-
그렇지 않으면
-
ret[i] :=y
-
(끝을 1 감소)
-
-
-
-
그렇지 않으면
-
initialize i :=0의 경우, i
-
x :=f(nums[시작], a, b, c)
-
y :=f(nums[end], a, b, c)
-
x
-
(시작을 1씩 증가)
-
ret[i] :=x
-
-
그렇지 않으면
-
ret[i] :=y
-
(끝을 1 감소)
-
-
-
-
리턴 렛
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#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, ]