정수 숫자와 정수 값 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, ]