elde bir array var, örneğin [4, 6, 23, 10, 1, 3]. bu arrayin en büyük sayısını alıcaz (23) kalan elemanların herhangi bir kombinasyonunun toplamının en büyük sayıya eşit olup olmadığını kontrol eden (10+4+6+3 = 23 oluyor, 1'i almadık ama) bir fonksiyon yazıcaz, nasıl yaparız içinden çıkamadım




 

subset sum problem diye aratirsan cesitli algoritmalar bulabilirsin.

robokot

easy kategorisinde olmasi biraz zorlama olmus ama genelde recursion veya dynamic programming ile cozulur. basit bir algoritmasi yok NP-hard bir problem cunku.

robokot

@robokot baktım ama orada 3 girişli fonkisyonlar var. benim dediğim soruda sadece array giriliyor yani örnekteki [4, 6, 23, 10, 1, 3] mesela. ve fonksiyondan True ya da False çıkıyor duruma göre. subset sumdan daha basit bi şeydir belki gözden mi kaçırdın acaba?

semaforo de medianoche

@aloha snackbar bir internet sitesinin challengında çözüyorum orada yüklü paketler aşağıdakiler hocam combinations yok :(

boto3
numpy
pandas
requests
scikit-learn
scipy

semaforo de medianoche

Abi dümdüz dinamik programlama bu. Aslında çok kolay bişey değil ama recursion'a giriş seviyesi sorusu olduğu için easy'e koymuşlardır. Cevabı 3 satır (dil js):

function findSum(arr, i, max) {
if (max == 0) return true;
if (i == 0) return false;
return findSum(arr, i - 1, max) || findSum(arr, i - 1, max - arr[i - 1]);
}

let arr = [4, 6, 10, 1, 3];
let max = 23;

console.log(findSum(arr, arr.length, max));

Edit: açıklama yapamamıştım, şimdi yazayım. Kabaca 23'ten diğer elemanları teker teker çıkarıyorsun, en son elinde 0 kaldıysa toplamı 23'e eşit diyebiliyorsun. Eğer bütün elemanlara baktıysan false dönüyorsun. Fibonacci'nin benzeri aslında.

plutongezegendegilmi

@plutongezegendegilmi hocam bir şirketin bootcampe giriş sınavıydı 20 tane çoktan seçmeli python bilgi sorusu vardı gayet basit, 1 tane sql sorusu vardı gayet basit, bunu gördüm klavyeye dokunamadım valla bi uzmanlığım olmasa da giriş seviyesi için kendime güveniyorum da bootcamp elemesi için fazla zordu sanki bu soru. neyse demek ki bunları bilen birini arıyolar buralar yok bende sağlık olsun.

arraye 23'ü koymayı unutmuşsun bir de ama o çözümü değiştirir mi yoksa sadece unuttun mu js'ye hakim olmadığımdan bilemiyorum orasını.

semaforo de medianoche

@semaforo, sadece ikinci kısmın kodunu verdim. Aslında öncesinde array'i bi kere gezip max'ı buluyorsun, sonrasında da max olan elemanı çıkarıp/ignore edip geri kalanın toplamını buluyorsun. Max'ı bulma O(n), elemanı çıkarma O(1), o yüzden o işlemlerin genel complexity'e etkisi yok.

Ya aslında ben bu tarz soruları sevmiyorum interview'larda çünkü önceden biliyor olman lazım. Önceden bilmediği halde o an çözebilecek genius arkadaşlar vardır belki ama özellikle onları aradıklarından sormuyorlar, eleyecek soru olsun diye koyuyorlar. Leetcode'da 1-2 ay takılsan hepsini görüp ezberler, mülakat esnasında çözersin.

plutongezegendegilmi
1

mobil görünümden çık