Python ile liste içerisinde iki sayının toplamının hedef bir sayıya eşit olup olmadığını kontrol etme
Python kullanarak örnek algoritma sorularını çözdüğümüz serimizin ilk sorusuna geçelim:
- Liste içerisinde iki sayının toplamının hedef bir sayıya eşit olup olmadığını kontrol edin.
- Örnek: [2, 7, 11, 15], hedef = 9
- Sonuç: True (2 + 7 = 9)
Problemin Python ile çözümünde, sayıları hızla kontrol edebilmek ve aynı sayıyı tekrar eklememek için set yapısını kullandım. Dizi üzerindeki her bir elemanı tek tek kontrol etmek ve hedef toplama ulaşan bir çiftin olup olmadığını belirlemek için for döngüsüne başvurdum. Eğer bir sayının, hedef toplama ulaşmak için gerekli olan diğer sayıyı daha önce görüp görmediğimi if koşuluyla kontrol ettim. Bakınız:
1 2 3 4 5 6 7 8 9 10 11 |
def has_pair_with_sum(nums, target): seen = set() for num in nums: if target - num in seen: return True seen.add(num) return False nums = [2, 7, 11, 15] target = 9 print(has_pair_with_sum(nums, target)) # True |
Sorumuzda bize verilen listemiz [2, 7, 11, 15] şeklinde verilmiş ve hedefimiz ise 9. Listenin ilk sayısı görüleceği üzere 2’dir. Hedeften çıkardığınızda: 9 – 2 = 7 olmaktadır İşte bu aşamada, “7” sayısını dizide daha önce görmedik. Bu nedenle, 2’yi seen kümesine ekliyoruz ve bir sonraki sayıya geçiyoruz.
Listedeki ikinci sayı ise 7’dir. Hedeften çıkardığınızda: 9 – 7 = 2 sonucunu bulmaktayız. 2’yi seen kümesinde sakladığımız için toplandığında (2 + 7) hedef sayı olan 9’a eşit olduğunu görmekteyiz. Bu yüzden fonksiyon True
döndürüyor.
Kısacası, her adımda “Bu sayıyı hedefe ulaşmak için kullanabilir miyim?” diye kontrol ediyoruz. Eğer kullanabilirsek, bu bilgiyi seen kümesinde saklayarak ilerliyoruz. Bu da, aranan iki sayının bulunup bulunmadığını hızla belirlememize yardımcı oluyor. Kodu çalıştırmak için: Trinket