[]

easy kategorisinde gözüken bir python sorusu

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  (22.08.21 21:16:23) 
easy kategorisinde olmasi biraz zorlama olmus ama genelde recursion veya dynamic programming ile cozulur. basit bir algoritmasi yok NP-hard bir problem cunku.


  • robokot  (22.08.21 21:23:17) 
@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  (22.08.21 21:34:23) 
@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  (22.08.21 22:02:27 ~ 22:02:57) 
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  (22.08.21 23:01:38 ~ 23:42:05) 
@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  (23.08.21 01:03:36 ~ 01:15:04) 
@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  (23.08.21 07:08:07) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.