1, 4, 5,9,2 тізімін ескере отырып, екі мәннің ықтимал комбинациясын табу үшін бағдарлама жазыңыз, мұнда sum = 6

Массивтерді ескере отырып, a = [1,4,5,9,2] .Мұндай мәндер жиынтығын табу/басып шығару керек, мұнда sum = 6.

Менің кодім төменде көрсетілген: (бұл O (n ^ 2) және тиімді емес). Кез келген жақсы шешімдер -

for(int out=0;out
3
Шағын N үшін 1) бұл шешім тиімді болып табыла ма, және 2) O (N ^ 2) O (N)
қосылды автор Stephen C, көзі

3 жауаптар

  1. Барлық нөмірлерді HashSet түріне орналастырыңыз.
  2. алаптың үстіне және әрбір val элементі үшін итерациялаңыз 6-val HashSet .

Мен кодты көрсетпеймін, себебі бұл үй тапсырмасы сияқты көрінеді (егер бұл болса, оны тегтегіңізді қойыңыз).

Сондай-ақ, қысқа массивтер үшін O (n ^ 2) шешімі, әрине, бұл жылдамырақ болады.

10
қосылды
Мен бұл қалыпты әңгімелесу мәселесі екенін растаймын. Сауалнамаға қатысқан кезімде 5 сұхбаттың әрқайсысы сияқты болды. Сондай-ақ, сіздің жауабыңыз ең жақсы ... ол тек екі рет тізімді айналдырады, яғни O (n) ерітіндісі болып табылады.
қосылды автор Nicholas, көзі
Жауап бергеніңіз үшін рақмет Aix. Бұл үй тапсырмасы емес. ТД-ның сұхбаттасу сұрақтарын іздеп жүргенде, мен жоғарыда айтылған сұраққа күмән келтірдім. Енді мен «сұхбат» белгісін қостым.
қосылды автор srock, көзі

Біріншіден, срокпен берілген шешім төмендегідей болуы керек

int length = a.length;

for(int out = 0; out < length ; out++) {
   for(int inn = 0; inn < length; inn ++) {
      if ((inn != out) && ((a[inn] + a[out]) == 6))
      sysout("The valid combination is "+a[inn]+" "+a[out])
   }
 }

Сондай-ақ ұзындығы * ұзындығын қайталау қажет. Aix-те айтылғандай, егер біз Hashset құрамымен бірге қолдансақ, онда ұзындығы ешқандай ұзақтығы азайтылады және әдіс хэш-кодты қолданып, шелек жеріне тікелей барады және деректерді салыстыруға әкеледі. Осылайша, HashSet :: бар жол үлкен деректер жоқ.

0
қосылды
for(int out=0;out
0
қосылды