Tek Bir Rakamı Değiştirerek Maksimum Fark Bulma: LeetCode 2566 (C++, JavaScript, Python)
Merhaba! Fatih Soysal olarak, bugün LeetCode’daki 2566 numaralı “Tek Bir Rakamı Değiştirerek Maksimum Fark Bulma” problemine başlangıç seviyesinde bir rehber sunacağım. Bu problem, mantıksal düşünme becerilerinizi ve kodlama yeteneklerinizi geliştirmenize yardımcı olacak eğlenceli bir sorudur. Önce problemi anlayalım, sonra farklı programlama dillerinde çözümlerini inceleyelim. Sonrasında da çözümün optimize edilmesi üzerine konuşalım. Umarım bu makale, size bu problemi çözmede yardımcı olur!
Problem Tanımı
Problem şu şekildedir: Size iki tam sayı veriliyor. Bu sayılardan birinin rakamlarından sadece birini değiştirerek iki sayı arasındaki farkı maksimize etmeniz gerekiyor. Değiştireceğiniz rakamı 0 ile 9 arasında herhangi bir sayı olarak seçebilirsiniz. Hedefimiz, bu değişiklik sonucunda elde edilecek en büyük farkı bulmaktır.
Örnekler
Problemi daha iyi anlamak için birkaç örneğe bakalım:
- num1 = 1234, num2 = 5678: num1’in rakamlarından birini değiştirerek (örneğin, 9234 yaparak) iki sayı arasındaki farkı maksimize edebiliriz. (5678 – 9234 = -3556)
- num1 = 9999, num2 = 1000: num1’in rakamlarından birini değiştirerek farkı maksimize edebiliriz. Örneğin, 0999 yaparak farkı 9000 olarak bulabiliriz.
Çözüm Yaklaşımı
Bu problemi çözmek için öncelikle her iki sayının rakamlarını tek tek incelemeliyiz. Sonrasında, her bir rakamı 0’dan 9’a kadar değiştirerek iki sayı arasındaki farkı hesaplayıp, en büyük farkı bulmalıyız. Bu işlem, her iki sayı için de tüm rakamlar için tekrarlanmalıdır. Ancak daha verimli bir yöntem de mevcuttur. Örneğin, num1’in rakamlarından hangisinin değiştirilmesiyle num2’ye en çok yaklaşacağımızı tespit edebiliriz. Bu yöntem daha az işlem gerektirir.
C++ Kodu
int maxDiff(int num1, int num2) {
int max_diff = abs(num1 - num2); // Başlangıç farkı
string s1 = to_string(num1);
for (int i = 0; i < s1.length(); ++i) {
for (int j = 0; j <= 9; ++j) {
string temp = s1;
temp[i] = j + '0';
max_diff = max(max_diff, abs(stoi(temp) - num2));
}
}
return max_diff;
}
JavaScript Kodu
function maxDiff(num1, num2) {
let maxDiff = Math.abs(num1 - num2);
const s1 = num1.toString();
for (let i = 0; i < s1.length; i++) {
for (let j = 0; j <= 9; j++) {
const temp = s1.substring(0, i) + j + s1.substring(i + 1);
maxDiff = Math.max(maxDiff, Math.abs(parseInt(temp) - num2));
}
}
return maxDiff;
}
Python Kodu
def maxDiff(num1, num2):
max_diff = abs(num1 - num2)
s1 = str(num1)
for i in range(len(s1)):
for j in range(10):
temp = list(s1)
temp[i] = str(j)
max_diff = max(max_diff, abs(int("".join(temp)) - num2))
return max_diff
Optimizasyonlar
Yukarıdaki kodlar problemi çözer, ancak daha da optimize edilebilirler. Örneğin, gereksiz hesaplamaları azaltarak performansı artırabiliriz. Bunun için, her bir rakamı değiştirdikten sonra farkın hesaplanması ve karşılaştırılması işlemlerini daha akıllıca yönetmemiz gerekir.
Ayrıca, problemde belirtilen kısıtlamaları daha iyi kullanarak kodun daha okunabilir ve daha verimli hale getirilmesi mümkün olabilir. Örneğin, bazı durumlarda tüm rakamları denemek yerine sadece belli rakamları denemek yeterli olabilir.
Umarım bu makale size yardımcı olmuştur. Daha fazla LeetCode çözümü ve programlama ipuçları için fatihsoysal.com adresini ziyaret edebilirsiniz.
#Etiketler: LeetCode, 2566, Maximum Difference, Remapping Digit, C++, JavaScript, Python, Programlama, Algoritma, Kodlama, Optimizasyon, Fatih Soysal
