Informatică, întrebare adresată de ProMinecraft69, 8 ani în urmă

Se da un vector ordonat crescator cu n elemente, apoi se citeste un numar S.


Sa se verifice daca 2 numere din vectorul respectiv au suma egala cu S.

Daca oricare 2 numere din vector au suma egala cu S, se va afisa rezultatul "Da" altfel se va afisa "Nu".


Incercati sa evitati sa folositi 2 foruri pentru a lua pe rand elementele.

Cel mai bun rezultat va fi premiat :))

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
0

#include <iostream>

using namespace std;

int v[10000];

int main(){

int i,j,n,s;

cin >>n;

for(i=0;i<n;i++){

cin>>v[i];

}

cin>>s;

i=0;

j=n-1;

while(i<j){

if(v[i]+v[j]>s)j--;

else if(v[i]+v[j]<s)i++;

else break;

}

cout<<(i==j?"NU":"DA");

}


CinevaFaraNume: Tehnica pe care am folosit-o se numeste "Two Pointers"
ProMinecraft69: Frumos lucrat , aproape la fel am facut si eu ;). Am vrut sa vad daca exista o solutie mult mai rapida dar cred ca asta e
ProMinecraft69: Asa am lucrat eu :https://pastebin.com/hT2mi057
CinevaFaraNume: O(n) e cam cat de rapid se poate la problema asta
CinevaFaraNume: + daca vrei doar viteza incearca sa declari variabilele folosite foarte des cu identificatorul "register"
ProMinecraft69: hmm interesant n-am auzit de asa ceva pana acum
ProMinecraft69: Cam cum se foloseste?
CinevaFaraNume: register
CinevaFaraNume: register <tip> <nume>
Alte întrebări interesante