doar ca, Vector cel mai probabil bate la ochi, mai trebuie adjustat codul defapt.
#include <iostream>
#include <vector>
using namespace std;
vector<int> gaseste_pereche(int n, vector<int> sir) {
// Initializam un vector de perechi cu valori -1
vector<int> perechi(n, -1);
// Parcurgem sirul de numere
for (int i = 0; i < n; i++) {
// Verificam daca numarul se afla pe o pozitie pară sau impară
if (i % 2 == 0) {
// Numarul se afla pe o pozitie pară, deci trebuie sa parcurgem sirul din stânga pentru a gasi perechea
int minim = INT_MAX;
for (int j = i-1; j >= 0; j--) {
if (sir[j] > sir[i] && sir[j] < minim) {
minim = sir[j];
perechi[i] = minim;
}
}
} else {
// Numarul se afla pe o pozitie impară, deci trebuie sa parcurgem sirul din dreapta pentru a gasi perechea
int minim = INT_MAX;
for (int j = i+1; j < n; j++) {
if (sir[j] > sir[i] && sir[j] < minim) {
minim = sir[j];
perechi[i] = minim;
}
}
}
}
// Returnam vectorul de perechi
return perechi;
}
int main() {
// Testam functia
vector<int> sir = gaseste_pereche(5, {1, 3, 6, 2, 4});
for (int i = 0; i < sir.size(); i++) {
cout << sir[i] << " ";
}
cout << endl; // Ar trebui sa afiseze 3 6 -1 4 -1
return 0;
}
Edit 2, i-am spus ca a dat gresit, si a adjustat
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
vector<int> gaseste_pereche(int n, vector<int> sir) {
// Initializam un vector de perechi cu valori -1
vector<int> perechi(n, -1);
// Initializam o stiva pentru a memora numerele mai mari decât numarul curent
stack<int> stiva;
// Parcurgem sirul de numere
for (int i = 0; i < n; i++) {
// Daca stiva este goala sau numarul curent este mai mic decât ultimul numar din stiva, il adaugam la stiva
if (stiva.empty() || sir[i] < stiva.top()) {
stiva.push(sir[i]);
} else {
// Numarul curent este mai mare decât ultimul numar din stiva, deci il scoatem din stiva până când gasim un numar mai mare decât numarul curent, care va fi perechea numarului curent
while (!stiva.empty() && stiva.top() < sir[i]) {
perechi[stiva.top()] = sir[i];
stiva.pop();
}
stiva.push(sir[i]);
}
}
// Returnam vectorul de perechi
return perechi;
}
int main() {
// Testam functia
vector<int> sir = gaseste_pereche(7, {24, 248, 456, 0, 35, 74, 554});
for (int i = 0; i < sir.size(); i++) {
cout << sir[i] << " ";
}
cout << endl; // Ar trebui sa afiseze 35 -1 554 24 74 248 -1
}
daca vector ar bate la ochi, stack e si mai si.