LeetCode Çözümleri – 48. Rotate Image

LeetCode içerisinde bulunan “Rotate Image” sorusunun açıklaması ve çözümü. Sizen matris olarak verilen bir resmi, saat yönünde 90 derece döndürmeniz isteniyor. Genel olarak burada ilk yapmamız gereken matrisi transpose etmemiz (https://en.wikipedia.org/wiki/Transpose), daha sonra da her satırı ters çevirmemiz bizim için yeterli oluyor.

Bu arada bunu in-place olarak, yani ek bir matris oluşturmadan, verilen matrisin içerisinde yapmanız gerekiyor.

Ek olarak, 12:31 ile 16:36 arası yaptığım hatayı bulmaya çalışıyorum, bu aralığı pas geçebilirsiniz.

🔥 LeetCode 48. Rotate Image: https://leetcode.com/problems/rotate-image/

➡️ Problem açıklaması:

You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).

You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.

Example 1:

Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]

Output: [[7,4,1],[8,5,2],[9,6,3]]

Example 2:

Input: matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]

Output: [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

Example 3:

Input: matrix = [[1]]

Output: [[1]]

Example 4:

Input: matrix = [[1,2],[3,4]]

Output: [[3,1],[4,2]]

Constraints:

matrix.length == n

matrix[i].length == n

1 <= n <= 20

-1000 <= matrix[i][j] <= 1000

LeetCode Çözümleri – 621. Task Scheduler [Facebook Mülakat Sorusu]

LeetCode içerisinde bulunan “Task Scheduler” sorusunun açıklaması ve çözümü. Sizen verilen görev listesi ve N sayısına istinaden, aynı task’lar arasında en az N kadar farklı task çalışması koşulu ile, en az kaç seferde bütün taskların çalıştırılabileceği soruluyor. LeetCode’a göre daha önce Facebook mülakatlarında sorulmuş sorulardan biriymiş.

🔥 LeetCode 621. Task Scheduler: https://leetcode.com/problems/task-scheduler/

➡️ Problem açıklaması:

Given a characters array tasks, representing the tasks a CPU needs to do, where each letter represents a different task. Tasks could be done in any order. Each task is done in one unit of time. For each unit of time, the CPU could complete either one task or just be idle.

However, there is a non-negative integer n that represents the cooldown period between two same tasks (the same letter in the array), that is that there must be at least n units of time between any two same tasks.

Return the least number of units of times that the CPU will take to finish all the given tasks.

Example 1:

Input: tasks = [“A”,”A”,”A”,”B”,”B”,”B”], n = 2

Output: 8

Explanation: A — B — idle — A — B — idle — A — B

There is at least 2 units of time between any two same tasks.

Example 2:

Input: tasks = [“A”,”A”,”A”,”B”,”B”,”B”], n = 0

Output: 6

Explanation: On this case any permutation of size 6 would work since n = 0.

[“A”,”A”,”A”,”B”,”B”,”B”]

[“A”,”B”,”A”,”B”,”A”,”B”]

[“B”,”B”,”B”,”A”,”A”,”A”]

And so on.

Example 3:

Input: tasks = [“A”,”A”,”A”,”A”,”A”,”A”,”B”,”C”,”D”,”E”,”F”,”G”], n = 2

Output: 16

Explanation:

One possible solution is

A — B — C — A — D — E — A — F — G — A — idle — idle — A — idle — idle — A

Constraints:

1 <= task.length <= 10^4

tasks[i] is upper-case English letter.

The integer n is in the range [0, 100].

LeetCode Çözümleri – 720. Longest Word in Dictionary

LeetCode içerisinde bulunan “Longest Word in Dictionary” sorusunun açıklaması ve çözümü. Bu soruda size verilen bir string array içerisinde, kendisi hariç diğer kelimelerden birer harf alarak oluşturulabilecek en uzun kelimeyi bulmanız isteniyor. Eğer birden fazla varsa, alfabetik olarak önce gelen kelimeyi yazdırmanız isteniyor.

🔥 LeetCode 720. Longest Word in Dictionary: https://leetcode.com/problems/longest-word-in-dictionary/

➡️ Problem açıklaması:

Given a list of strings words representing an English Dictionary, find the longest word in words that can be built one character at a time by other words in words.

If there is more than one possible answer, return the longest word with the smallest lexicographical order. If there is no answer, return the empty string.

Example 1:

Input: words = [“w”,”wo”,”wor”,”worl”, “world”]

Output: “world”

Explanation: The word “world” can be built one character at a time by “w”, “wo”, “wor”, and “worl”.

Example 2:

Input: words = [“a”, “banana”, “app”, “appl”, “ap”, “apply”, “apple”]

Output: “apple”

Explanation: Both “apply” and “apple” can be built from other words in the dictionary. However, “apple” is lexicographically smaller than “apply”.

Note:

All the strings in the input will only contain lowercase letters.

The length of words will be in the range [1, 1000].

The length of words[i] will be in the range [1, 30].

Stack Overflow Nedir? Etkİlİ Şekİlde Nasıl Kullanılır?

Günümüzde programcıların internette en çok başvurduğu yer Stack Overflow. Peki bu siteyi gerçekten kullanmayı biliyor muyuz? Nasıl kullanılır? Hangi sorular sorulabilir? Hangi sorular sorulmamalıdır? Kuralları nelerdir? Türkiye’deki 3. en yüksek reputation puanına sahip kişi olarak (kaynak: https://data.stackexchange.com/stackoverflow/query/90536/top-users-turkey) bu videoda bu altın değerindeki siteden en iyi şekilde nasıl yararlanabileceğinizi ve kurallarını anlatmaya çalıştım.

➡️ Stack Overflow nedir ve ilk olarak ne zaman kullanmaya başladım?

Stack Overflow en basit tabiriyle bir programlama soru cevap sitesi. Programlama ile ilgili bir sorunuz varsa sorabileceğiniz, başka programcıların sorularını yanıtlayabileceğiniz ve onlarla fikir alışverişi yapabileceğiniz (meta siteleri) bir internet sitesi. 2008 yılında Jeff Atwood ve Joel Spolsky tarafında kuruldu, ben de özellikle 2012 yılında askerden geldikten sonraki dönemde yoğun olarak kullanmaya başladım.

Kaynak: https://stackoverflow.com/tour

➡️ Stack Overflow’da hangi konularda sorular sorulabilir?

Stack Overlfow’da şu tip sorular sorabilirsiniz;

💡 Spesifik programlama problemleri

💡 Yazılım algoritmaları

💡 Programcılar tarafından düzenli kullanılan yazılım araçları

💡 Yazılım geliştirme ile ilgili spesifik cevap verilebilen sorular.

Sormak istediğiniz soru bu kategorilerde olsa bile aşağıdaki kategorilere uymaması gerekir;

🔴 “Kodum neden çalışmıyor” tarzı sorularda minimal bir kod örneği vermemek

🔴 Küçük yazım hatasından kaynaklanan sorular

🔴 Ev ödevimi yapamıyorum. https://meta.stackoverflow.com/q/334822/447156

🔴 Kitap, uygulama, yazılım kütüphanesi tavsiyeleri

🔴 Bilgisayar donanımı ve network ile ilgili sorular

🔴 3. web siteleri ile ilgili sorular

Kaynak: https://stackoverflow.com/help/on-topic

➡️ Stack Overflow’da hangi konularda sorular sorulmamalıdır?

Sohbet edici, açık uçlu sorular genellikle Stack Overflow’da sorulmaması gereken sorulardır.

🔴 Temel amacı programlama olmayan sorular.

🔴 Her cevabın doğru olduğu sorular. “Favori editörünüz hangisi?”

🔴 Gerçekte bir sorunun olmadığı sorular. “Diğer insanların bu konuda ne düşündüklerini merak ediyorum.”

🔴 Açık uçlu ve varsayımsal sorular: “Şöyle olsaydı ne olurdu?”

🔴 “Bu araç çok kötü, değil mi?” Kaynak: https://stackoverflow.com/help/dont-ask

➡️ Bir sorunun kapatılması ne anlama gelir?

Bir sorunun kapatılması, o sorunun muhtemelen Stack Overflow’a uygun olmadığı anlamına gelir. Kapatılan sorulara cevap veremezsiniz. Bu sayede kötü cevapların da önüne geçilmiş olur. Kapatılma nedenlerine bakacak olursak;

💡 Duplicate: Sorunuza çok benzer olan bir soru daha önce sorulmuş.

💡 Off-topic: Sorunuz konu olarak bu siteye uygun değil.

💡 Needs details or clarity: Sorunuz yeterince açık değil veya flu.

💡 Needs more focus: Tek bir soruda “tek bir soru”

💡 Opinion-based: Fikir bazlı sorular.

Eğer reputation puanınız 3000’den fazlaysa bir soruyu kapatılması için oylayabilirsiniz. Unutmayın ki, kapatılan bir soru her zaman tekrar açılabilir. Kaynak: https://stackoverflow.com/help/closed-questions

➡️ Nasıl iyi bir soru sorabilirim?

💡 Ara, ve araştır.

💡 Sorununuzu açık bir şekilde belirten bir başlık

💡 Önce açıklama, sonra kod

💡 Diğer kişilerin de aynı hatayı almasını sağlayın.

💡 Tüm ilgili tag’ları ekleyin.

💡 Submit etmeden sonra bir kez tekrar okuyun.

💡 Submit edin ve gelen feedback’lere cevap verin.

Kaynak: https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/

➡️ Minimal ve tekrarlanabilir bir örnek nasıl oluşturulur?

Kaynak: https://stackoverflow.com/help/minimal-reproducible-example

➡️ Soruma kimse cevap vermezse ne yapmalıyım?

Bounty sistemi ile ilgi çekebilirsiniz: https://stackoverflow.com/help/bounty

➡️ Reputation sistemi nedir? Nasıl çalışır?

Reputation, topluluğun size ne kadar güvendiğinin bir ölçüsüdür; meslektaşlarınızı ne hakkında konuştuğunuzu bildiğinize ikna ederek kazanılır. Ne kadar çok reputation kazanırsanız, o kadar çok ayrıcalık kazanırsınız ve sitede o kadar çok araca erişebilirsiniz.

➡️ İyi bir cevap nasıl yazılır?

Kaynak: https://stackoverflow.com/help/how-to-answer

LeetCode Çözümlerİ – 775. Global and Local Inversions

LeetCode içerisinde bulunan “Global and Local Inversions” sorusunun açıklaması ve çözümü. Bu soruda size verilen “global inversions” ve “local inversions” tanımlarına göre eşit olup olmadığı soruluyor.

🔥 LeetCode 775. Global and Local Inversions: https://leetcode.com/problems/global-and-local-inversions/

➡️ Problem açıklaması:

We have some permutation A of [0, 1, …, N – 1], where N is the length of A.

The number of (global) inversions is the number of i lessThan j with 0 lessEqual i less j lessThan N and A[i] biggerThan A[j].

The number of local inversions is the number of i with 0 lessEqual i lessThan N and A[i] biggerThan A[i+1].

Return true if and only if the number of global inversions is equal to the number of local inversions.

Example 1:

Input: A = [1,0,2]

Output: true

Explanation: There is 1 global inversion, and 1 local inversion.

Example 2:

Input: A = [1,2,0]

Output: false

Explanation: There are 2 global inversions, and 1 local inversion.

Note:

A will be a permutation of [0, 1, …, A.length – 1].

A will have length in range [1, 5000].

The time limit for this problem has been reduced.

LeetCode Çözümlerİ – 1189. Maximum Number of Balloons

LeetCode içerisinde bulunan “Maximum Number of Balloons” sorusunun açıklaması ve çözümü. Bu soruda size verilen kelime içerisindeki harfleri bir defa kullanarak, “balloon” kelimesinin kaç defa yazdırılabileceği soruluyor.

🔥 LeetCode 1189. Maximum Number of Balloons: https://leetcode.com/problems/maximum-number-of-balloons/

➡️ Problem açıklaması:

Given a string text, you want to use the characters of text to form as many instances of the word “balloon” as possible.

You can use each character in text at most once. Return the maximum number of instances that can be formed.

Example 1:

Input: text = “nlaebolko”

Output: 1

Example 2:

Input: text = “loonbalxballpoon”

Output: 2

Example 3:

Input: text = “leetcode”

Output: 0

Constraints:

1 <= text.length <= 10^4

text consists of lower case English letters only.

LeetCode Çözümlerİ – 206. Reverse Linked List

LeetCode içerisinde bulunan “Reverse Linked List” sorusunun açıklaması ve çözümü. Bu soruda head olarak verilen linked list‘in tüm node’larını tersine çevirmeniz isteniyor.

🔥 LeetCode 206. Reverse Linked List: https://leetcode.com/problems/reverse-linked-list/

🔥 Bahsettiğim makale linki: https://www.cs.cmu.edu/~adamchik/15-121/lectures/Linked%20Lists/linked%20lists.html

➡️ Problem açıklaması:

Reverse a singly linked list.

Example:

Input: 1–2–3–4–5–NULL

Output: 5–4–3–2–1–NULL

Follow up:

A linked list can be reversed either iteratively or recursively. Could you implement both?

LeetCode Çözümlerİ – 1047. Remove All Adjacent Duplicates In String

LeetCode içerisinde bulunan “Remove All Adjacent Duplicates In String” sorusunun açıklaması ve çözümü. Bu soruda verilen string’in, yan yana aynı aynı olan tüm karakterleri silinerek, en sonda yan yana aynı karakter kalmayacak şekilde hazırlamanız isteniyor.

🔥 LeetCode 1047. Remove All Adjacent Duplicates In String: https://leetcode.com/problems/middle-of-the-linked-list/

➡️ Problem açıklaması:

Given a string S of lowercase letters, a duplicate removal consists of choosing two adjacent and equal letters, and removing them.

We repeatedly make duplicate removals on S until we no longer can.

Return the final string after all such duplicate removals have been made. It is guaranteed the answer is unique.

Example 1:

Input: “abbaca”

Output: “ca”

Explanation: For example, in “abbaca” we could remove “bb” since the letters are adjacent and equal, and this is the only possible move. The result of this move is that the string is “aaca”, of which only “aa” is possible, so the final string is “ca”.

Note:

1 <= S.length <= 20000

S consists only of English lowercase letters.

Programlama Becerİnİzİ Gelİştİrmek İçİn Uygulayabİleceğİnİz 8 madde

Programlama becerinizi geliştirmek için yapabileceğiniz en etkili yöntemlerden bahsetmeye çalışacağım bu videoda. Hepsi muhtemelen daha önce duyduğunuz kavramlar fakat hepsinin teker teker incelenmesi ve öğrenilmesi gereken konular olduğunu düşünüyorum.

➡️ Sizden daha zeki insanlarla çalışın. Söylendiği gibi “Bir odada en zeki sizseniz, muhtemelen yanlış odadasınızdır”. Gerçekten de öyle. Sizden daha zeki insanlarla çalışmak sizi her zaman yukarıya çekecektir. Onlardan çok şey öğreneceksiniz bu süreçte. Ayrıca zeki insanlarla çalışmaya nasıl alışabileceğiniz ile ilgili şuna göz atabilirsiniz: https://www.quora.com/How-did-you-adjust-to-working-with-smarter-people

➡️ Herkesi dinleyin. Junior, senior, kıdemli ve guru olsun, herkesi dinleyin. İş ünvanı her şey demek değildir. Kimden farklı fikirler alabileceğinizi tahmin edemezsiniz.

➡️ Farklı diller ve framework’ler öğrenmek. Farklı diller ve framework’ler öğrenmek, bunları düzenli olarak kullanmayacak olsanız bile size farklı bir bakış açısı katar. Bu tarz yapıların genel programlama yapılarını nasıl kullandıklarını ve sizin hali hazırda kullandığınız yapılar ile karşılaştırarak aralarındaki farkları öğrenebilirsiniz.

➡️ Best practice’leri iyi öğrenin. Yazdığınız kod ve ortamlar ile ilgili best practice’leri en iyi şekilde öğrenin. Bu pratikler yıllar boyunca insanların tecrübeleri ile oluşmuş şeylerdir. Bunları dikkate alın ve düzenli olarak bunları uygulamaya çalışın. Günümüzde bu pratikleri uygulamanızı sağlayabilecek bir çok uygulama da mevcut. Faydalanın. https://en.wikipedia.org/wiki/Best_coding_practices

➡️ Zeki insanların hataları nasıl ele aldığını izleyin. Bu insanların hata ve sorun durumlarını nasıl ele aldıklarını gözlemleyin. Sorunun temeline inme yöntemlerini ve çözüm bulma becerilerini iyi olarak öğrenin.

➡️ Jack of all trades, master of none “Hiçbirinin ustası olmayın, ancak çoğu zaman bir ustadan daha iyi olun”. Evet biraz karmaşık bir tavsiye gibi gelebilir ama, tıpkı Moore yasasının dediği gibi: “Bildiğiniz şeylerin yarısı 18-24 ay içinde modası geçmiş olacak”. https://en.wikipedia.org/wiki/Jack_of_all_trades,_master_of_none ve https://tr.wikipedia.org/wiki/Moore_yasas%C4%B1

➡️ Yazdığınız kodtan daha çok kod okuyun. Kod okumak zor olabilir sizin için. Eskiler “iyi programcılar yazdıkları kodtan daha fazla kod okurlar.” derler. Kesinlikle katıldığım bir önerme. Profesyonel insanların kodlarını okuyun. Hem zevk alırsınız, hem de çok şey öğrenirsiniz. Ayrıca şu linklere de göz atabilirsiniz;

💡 Reading other peoples code – https://youtu.be/mrXHf71lYrs

💡 Learn to Read the Source, Luke – https://blog.codinghorror.com/learn-to-read-the-source-luke/

➡️ Düzenli spor yapın. Sadece programlama için değil, hayatın her alanında gerekli spor yapmak. O yüzden düzenli olarak (tavsiyem koşu) spor yapmanızı şiddetle tavsiye ederim.

💡 Why Programmers Should Exercise – http://gallabytes.com/2014/02/why-programmers-should-exercise.html

💡 Sports and Programming – https://christinalee.github.io/DCLondon2019/

💡 How important is exercising for programmers? Does it help with becoming a better programmer? – https://www.quora.com/How-important-is-exercising-for-programmers-Does-it-help-with-becoming-a-better-programmer

Sizlerin de verebileceğiniz tavsiyeler varsa videonun yorumlar kısmına yazabilirsiniz.

LeetCode Çözümlerİ – 876. Middle of the Linked List

LeetCode içerisinde bulunan “Middle of the Linked List” sorusunun açıklaması ve çözümü. Bu soruda verilen linked list içerisindeki orta node’u bulmanız isteniyor. Eğer iki tane orta node varsa, ikinci node’u döndürmelisiniz.

🔥 LeetCode 876. Middle of the Linked List: https://leetcode.com/problems/middle-of-the-linked-list/

➡️ Problem açıklaması:

Given a non-empty, singly linked list with head node head, return a middle node of linked list.

If there are two middle nodes, return the second middle node.

Example 1:

Input: [1,2,3,4,5]

Output: Node 3 from this list (Serialization: [3,4,5])

The returned node has value 3. (The judge’s serialization of this node is [3,4,5]).

Note that we returned a ListNode object ans, such that: ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, and ans.next.next.next = NULL.

Example 2:

Input: [1,2,3,4,5,6]

Output: Node 4 from this list (Serialization: [4,5,6])

Since the list has two middle nodes with values 3 and 4, we return the second one.