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, ]
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP