Ro'yxatda 1, 4, 5, 9, 2 qiymatlari mavjud bo'lgan ikkita qiymatdan iborat kombinatsiyalarni topish uchun dastur yozing

Jadval berilsa a = [1,4,5,9,2]. Ikkala qiymatning kombinatsiyasini topib, kiritish kerak, bu erda sum = 6.

Mening kodim quyidagicha: (u (n ^ 2) va samarali emas). Har qanday yaxshi echimlar -

for(int out=0;out
3
2) O (N ^ 2) O (N) ga nisbatan tezroq bo'lishi mumkin.
qo'shib qo'ydi muallif Stephen C, manba

3 javoblar

  1. Barcha raqamlarni HashSet ga joylashtiring.
  2. Serialni yorsangiz va val har bir element uchun 6-val HashSet -ni tekshiring.

Men kodni ko'rsatmayapman, chunki bu uy vazifasiga o'xshaydi (agar bo'lsa, iltimos uni etiketkating).

Bundan tashqari, qisqartirilgan kataloglar uchun O (n ^ 2) echimining deyarli aniqrog'i bu tezroq bo'ladi.

10
qo'shib qo'ydi
Buni juda oddiy bir intervyu savolini tasdiqlashim mumkin. Men suhbatlashganimda, bu 5 ta intervyudan har biriga o'xshagan. Shuningdek, sizning javobingiz eng yaxshisidir ... u faqat ikki marta, ya'ni O (n) eritmasi bo'lgan ro'yxatni kesib o'tadi.
qo'shib qo'ydi muallif Nicholas, manba
Javobingiz uchun rahmat. Aix. Bu uy vazifasi emas. SD intervyu savollarini izlayotganimda yuqoridagi savolga qoqildim. Endi "intervyu" yorlig'ini qo'shib qo'ydim.
qo'shib qo'ydi muallif srock, manba

Birinchidan, srock tomonidan berilgan eritma quyida keltirilgan bo'lishi kerak

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])
   }
 }

Va, bu uzunligi * uzunlikdagi vaqtni yechish kerak. Aix tomonidan aytilganidek, agar biz Hashset bilan ishlatadigan bo'lsak, faqat vaqt uzunligi yo'q va uni o'z ichiga oladi usuli to'g'ridan-to'g'ri hashcode yordamida chelak joyiga o'tadi va solishtirish uchun ma'lumotlarni olib keladi. Ya'ni, bu HashSet :: yo'li katta ma'lumot yo'q.

0
qo'shib qo'ydi
for(int out=0;out
0
qo'shib qo'ydi