मान लीजिए कि हमारे पास पूर्णांक संख्याओं और पूर्णांक मानों a, b और c की एक क्रमबद्ध सरणी है। हमें सरणी के प्रत्येक अवयव x में f(x) =ax^2 + bx + c रूप का द्विघात फलन लागू करना है। और अंतिम सरणी क्रमबद्ध क्रम में होनी चाहिए।
इसलिए, यदि इनपुट nums =[-4,-2,2,4], a =1, b =3, c =5 जैसा है, तो आउटपुट [3,9,15,33]
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
फ़ंक्शन f() को परिभाषित करें, जो x, a, b, c -
. लेता है -
वापसी कुल्हाड़ी^2 + बीएक्स + सी
-
मुख्य विधि से निम्न कार्य करें -
-
n :=अंकों का आकार
-
प्रारंभ:=0, अंत:=n-1
-
आकार n के सरणी रिट को परिभाषित करें
-
अगर एक>=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 से बढ़ाएं)
-
रिट[i] :=x
-
-
अन्यथा
-
रिट[i] :=y
-
(अंत में 1 से घटाएं)
-
-
-
-
अन्यथा
-
इनिशियलाइज़ i:=0 के लिए, जब i
-
x :=f(nums[start], a, b, c)
-
y :=f(nums[end], a, b, c)
-
यदि x
-
(शुरुआत को 1 से बढ़ाएं)
-
रिट[i] :=x
-
-
अन्यथा
-
रिट[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, ]