Valoare apropiată ( c++)

https://chat.openai.com/chat

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 :slight_smile:


#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.