LeetCode Çözümleri – 860. Lemonade Change

LeetCode içerisinde bulunan “Lemonade Change” sorusunun açıklaması ve çözümü. Bu soruda bir limonata satıcısı olduğunuzu düşünün. Başlangıçta elinizde hiç para üstü yok ve sırada bazı müşteriler var. Sıradaki müşterilere yeterli miktarda para üstü verip veremeyeceğinizi bulmanız isteniyor.

✨ LeetCode 860. Lemonade Change: https://leetcode.com/problems/lemonade-change/

➡️ Problem açıklaması:

At a lemonade stand, each lemonade costs $5.

Customers are standing in a queue to buy from you, and order one at a time (in the order specified by bills).

Each customer will only buy one lemonade and pay with either a $5, $10, or $20 bill. You must provide the correct change to each customer, so that the net transaction is that the customer pays $5.

Note that you don’t have any change in hand at first.

Return true if and only if you can provide every customer with correct change.

Example 1:

Input: [5,5,5,10,20]

Output: true

Explanation:

From the first 3 customers, we collect three $5 bills in order.

From the fourth customer, we collect a $10 bill and give back a $5.

From the fifth customer, we give a $10 bill and a $5 bill.

Since all customers got correct change, we output true.

Example 2:

Input: [5,5,10]

Output: true

Example 3:

Input: [10,10]

Output: false

Example 4:

Input: [5,5,10,10,20]

Output: false

Explanation:

From the first two customers in order, we collect two $5 bills.

For the next two customers in order, we collect a $10 bill and give back a $5 bill.

For the last customer, we can’t give change of $15 back because we only have two $10 bills.

Since not every customer received correct change, the answer is false.

Note:

0 <= bills.length <= 10000

bills[i] will be either 5, 10, or 20.

LeetCode Çözümleri – 455. Assign Cookies

LeetCode içerisinde bulunan “Assign Cookies” sorusunun açıklaması ve çözümü. Bu soruda size verilen kurabiyeler ile, maksimum stayıda çocuğu nasıl doyurabileceğinize ait bir soru sorulmakta.

✨ LeetCode 455. Assign Cookies: https://leetcode.com/problems/assign-cookies/

➡️ Problem açıklaması:

Assume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie.

Each child i has a greed factor g[i], which is the minimum size of a cookie that the child will be content with; and each cookie j has a size s[j]. If s[j] biggerEqual g[i], we can assign the cookie j to the child i, and the child i will be content. Your goal is to maximize the number of your content children and output the maximum number.

Example 1:

Input: g = [1,2,3], s = [1,1]

Output: 1

Explanation: You have 3 children and 2 cookies. The greed factors of 3 children are 1, 2, 3. And even though you have 2 cookies, since their size is both 1, you could only make the child whose greed factor is 1 content. You need to output 1.

Example 2:

Input: g = [1,2], s = [1,2,3]

Output: 2

Explanation: You have 2 children and 3 cookies. The greed factors of 2 children are 1, 2. You have 3 cookies and their sizes are big enough to gratify all of the children, You need to output 2.

Constraints:

1 <= g.length <= 3 * 10^4

0 <= s.length <= 3 * 10^4

1 <= g[i], s[j] <= 2^31 – 1

Git içerisinde “Stage” Nedir?

Git versiyon kontrol sisteminde “stage” kavramı anlaşılması zor bir kavram olabiliyor bazen, bu videoda bildiğim kadarıyla bu kavramı anlatmaya çalıştım.

Git kesinlikle kendine özgü kelime haznesine sahip olan bir yapı. Bu nedenle birçok kavram tam olarak anlaşılamayabiliyor. “commit” bunlara örnek olarak verilebilir mesela.

Git temelde 3 iş akışına sahip;

1️⃣ Kendi local’inizdeki (bilgisayar, klasör vs.) çalışma dosyaları değiştirirsiniz.

2️⃣ Bir sonraki commit’inizde olmasını istediğiniz dosyaları stage’e atarsınız.

3️⃣ Stage alanınızdaki dosyaları, “commit” yaparak uzaktaki sunucunuza (git directory) gönderebilirsiniz.

✨ Wikipedia’dan güzel bir örnek;

✨ Bir dosyayı stage’lemek, aslında o dosyayı bir sonraki “commit”‘e hazırlamak demektir. Aynı dosyada olsa bile, sadece stage’lediğiniz değişiklikler bir sonraki commint’inizde uzaktaki git sunucusuna gönderilecektir. Örneğin; saat 6 oldu ve işten ayrılmak üzeresiniz ve A ve B adında 2 adet geliştirmeniz var. A geliştirmenizi tamamladınız fakat B geliştirmesi henüz tamamlanamadı. Commit yapıp eve gitmek istiyorsunuz, bu nedenle A geliştirmesine ait kısımları stage’leyip commit edebilirsiniz. B değişiklikleri hala sizin çalışma klasörünüzde olduğu gibi kalacağından, yarın sabah gelip bu geliştirmeye devam edebiliriniz.

Bir başka örnek olarak, aynı dosya üzerinde bile, buna “file.txt” diyelim, yaptığınız ve bir sonraki commit’te olmasını istediğiniz değişiklikleri stage’ledikten sonra, bu dosya üzerinde tekrar çalışmaya devam edebilirsiniz. Bu dosya üzerinde stage’ledikten sonra yaptığınız değişiklikler, bir sonraki commit’inizde bulunmazlar.

Aslında Git içerisinde bu yapı orijinalde “index” veya “cache” olarak anılır, yani bir sonraki commit’te gönderilecek olan dosyaların cache’lenmesi veya index’lemesi gibi düşünebiliriz. Burası çalışılan dizin ile, bir sonraki commit’lenecek düzenleme arasındaki bağlantıyı tutar.

Bence “stage” mantığı, versiyon kontrolüne tam olarak nasıl yaklaşmak istediğimizi daha iyi kontrol etmemize imkan veriyor.

Faydalı linkler:

✨ Git official page: https://git-scm.com/

✨ Git wikipedia: https://en.wikipedia.org/wiki/Git

✨ Git repository on Github: https://github.com/git/git

LeetCode Çözümleri – 242. Valid Anagram

LeetCode içerisinde bulunan “Valid Anagram” sorusunun açıklaması ve çözümü. Verilen iki string‘ten, biri diğerinin anagramı olup olmadığı soruluyor.

✨ Anagram nedir? https://tr.wikipedia.org/wiki/Anagram

Anagram, bir sözcüğün veya sözcük grubunun harflerinin değişik düzenle başka bir sözcüğü veya sözcük grubunu oluşturmasıdır.

Türkçe bir anagram örneği: Bahriyeli = Harbiyeli

✨ LeetCode 242. Valid Anagram: https://leetcode.com/problems/valid-anagram/

➡️ Problem açıklaması:

Given two strings s and t , write a function to determine if t is an anagram of s.

Example 1:

Input: s = “anagram”, t = “nagaram”

Output: true

Example 2:

Input: s = “rat”, t = “car”

Output: false

Note: You may assume the string contains only lowercase alphabets.

Follow up: What if the inputs contain unicode characters? How would you adapt your solution to such case?

LeetCode Çözümleri – 75. Sort Colors

LeetCode içerisinde bulunan “Sort Colors” sorusunun açıklaması ve çözümü. Bu soruda size karışık olarak verilen kırmızı, beyaz ve mavi renklerden (sırasıyla 0, 1 ve 2 ile ifade ediliyor), önce tüm kırmızılar, sonra tüm beyazlar ve en son tüm maviler olacak şekilde, ekstra bir alan kullanmadan sıralamanız isteniyor.

➡️ Quick sort (Hızlı sıralama) nedir?

✨ Wikipedia açıklaması: https://tr.wikipedia.org/wiki/H%C4%B1zl%C4%B1_s%C4%B1ralama

✨ Geeksforgeeks açıklaması: https://www.geeksforgeeks.org/quick-sort/

✨ Algoritmanın görsel açıklaması: http://sorting.at/ ve https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html

🔥 LeetCode 75. Sort Colors: https://leetcode.com/problems/sort-colors/

➡️ Problem açıklaması:

Given an array nums with n objects colored red, white, or blue, sort them in-place so that objects of the same color are adjacent, with the colors in the order red, white, and blue.

Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.

Follow up:

Could you solve this problem without using the library’s sort function?

Could you come up with a one-pass algorithm using only O(1) constant space?

Example 1:

Input: nums = [2,0,2,1,1,0]

Output: [0,0,1,1,2,2]

Example 2:

Input: nums = [2,0,1]

Output: [0,1,2]

Example 3:

Input: nums = [0]

Output: [0]

Example 4:

Input: nums = [1]

Output: [1]

Constraints: n == nums.length

1 <= n <= 300

nums[i] is 0, 1, or 2.

LeetCode Çözümleri – 290. Word Pattern

LeetCode içerisinde bulunan “Word Pattern” sorusunun açıklaması ve çözümü. Bu soruda size verilen iki adet string içerisinde, kelimeler ve harfler olarak aynı tasarıma sahip olup olmadığı soruluyor.

🔥 LeetCode 290. Word Pattern: https://leetcode.com/problems/word-pattern/

➡️ Problem açıklaması:

Given a pattern and a string s, find if s follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in s.

Example 1:

Input: pattern = “abba”, s = “dog cat cat dog”

Output: true

Example 2:

Input: pattern = “abba”, s = “dog cat cat fish”

Output: false

Example 3:

Input: pattern = “aaaa”, s = “dog cat cat dog”

Output: false

Example 4:

Input: pattern = “abba”, s = “dog dog dog dog”

Output: false

Constraints:

1 lessEqual pattern.length lessEqual 300

pattern contains only lower-case English letters.

1 lessEqual s.length lessEqual 3000

s contains only lower-case English letters and spaces ‘ ‘.

s does not contain any leading or trailing spaces.

All the words in s are separated by a single space.

Özgeçmişlerde Not Ortalamasının Önemi ve Net Hedefler

Yazılımcının özgeçmişinde not ortalamasının önemi nedir? Ne zaman özgeçmişe yazılmalı, ne zaman yazılmamalı? Hedeflediğiniz pozisyonlar konusunda nasıl daha net olabilirsiniz? Elde ettiğiniz deneyimleri ve projeleri nasıl listelemelisiniz? Bu videoda bu konulardan bahsetmeye çalıştım.

➡️ Herkes verdiği emeğim karşılığını almak ister, bu gayet doğal bir durum. Bir çiftçi ektiği mısırın mahsulünü nasıl hak ediyorsa, bir öğrenci de çok çalışarak elde ettiği yüksek not ortalamasının mahsulünü almak ister. Standart bir testin yokluğunda, not ortalaması bu görevi görür. Yüksek bir not ortalaması sizin kodlama konusunda iyi olduğunuzu göstermez, ama işe alan kişiler tarafından sizi daha uygun bir konuma getirir.

➡️ Düşük bir not ortalamanız varsa, fakat oldukça iyi iş deneyimleriniz varsa, not ortalamanızı özgeçmişinizde listelemeyebilirsiniz. Deneyimleriniz ve tecrübeleriniz ile karşınızdaki etkilediyseniz, not ortalamasının ne önemi var ki? Ancak not ortalamanız düşükse ve iş tanımı için yeterli yeteneğiniz yoksa, belki de bunlardan birini daha çok geliştirmeli ve iş başvurularını daha sonra değerlendirmelisiniz.

➡️ Üniversitedeki her ders sizin çalışma hayatınızda kullanacağınız dersler değil, bunu hepimiz biliyoruz. Nadir bir durum olsa da, not ortalamanız, ilginiz olmayan, diğer alandaki dersler nedeniyle düşük olabilir. Örneğin, programlama ile ilgili derslerde iyi, fakat alanınızın dışındaki derslerde kötü olabilirsiniz. Bu gibi durumlarda, özgeçmişinize transkript bile eklemeyi düşünebilirsiniz.

➡️ Ayrıca not ortalamanızı listelediyseniz, “kaç üzerinden” olduğunu da listelemenizi tavsiye ederim. Eğer karşınızdaki kişi okuduğunuz üniversitenin derecelendirme sistemine aşina değilse “3.6” ona hiçbir anlam ifade etmeyecektir. Bu durumda “3.6 / 4.0” şeklinde yazabilirsiniz örneğin.

➡️ Ek olarak, hedefleriniz konusunda net olun, hangi pozisyona başvuruyorsunuz? İş tanımını doğru bir şekilde okuyun ve başvurduğunuz işi öğrenin.

➡️ “İş deneyimi” herhangi bir iş deneyimi anlamına gelmez; “ilgili” iş deneyimi anlamına gelir. Nitelik, nicelikten önce gelir.

➡️ Açıklamaların kapsamlı ama öz olduğundan emin olun. “Yazılım mühendisliği stajyeri – kod yazdım” demek yerine, hiçbir şey yazmamak daha iyi olabilir, bunu düşünün.

https://www.quora.com/Does-GPA-matter-for-a-CS-student-who-want-to-work-at-a-tech-company

LeetCode Çözümleri – 434. Number of Segments in a String

LeetCode içerisinde bulunan “Number of Segments in a String” sorusunun açıklaması ve çözümü. Bu soruda size verilen string içerisinde, “segment” yani boşluk karakteri içermeyen karakterler bütünü sayısını bulmanız isteniyor.

🔥 LeetCode 434. Number of Segments in a String: https://leetcode.com/problems/number-of-segments-in-a-string/

➡️ Problem açıklaması:

You are given a string s, return the number of segments in the string.

A segment is defined to be a contiguous sequence of non-space characters.

Example 1:

Input: s = “Hello, my name is John”

Output: 5

Explanation: The five segments are [“Hello,”, “my”, “name”, “is”, “John”]

Example 2:

Input: s = “Hello”

Output: 1

Example 3:

Input: s = “love live! mu’sic forever”

Output: 4

Example 4:

Input: s = “”

Output: 0

Constraints:

0 <= s.length <= 300

s consists of lower-case and upper-case English letters, digits or one of the following characters “!@#$%^&*()_+-=’,.:”.

The only space character in s is ‘ ‘.

LeetCode Çözümleri – 674. Longest Continuous Increasing Subsequence

LeetCode içerisinde bulunan “Longest Continuous Increasing Subsequence” sorusunun açıklaması ve çözümü. Bu soruda sizden sürekli artışın olduğu en uzun alt diziyi bulmanız isteniyor. Bu tarz sorularda “Sliding Window” tekniği çok yaygın kullanılan bir tekniktir.

✨ Sliding Window tekniği nedir?

🟩 What is Sliding Window Algorithm? Examples?: https://stackoverflow.com/q/8269916/447156

🟩 An Introduction to Sliding Window Algorithms: https://levelup.gitconnected.com/an-introduction-to-sliding-window-algorithms-5533c4fe1cc7

🟩 How to Solve Sliding Window Problems: https://medium.com/outco/how-to-solve-sliding-window-problems-28d67601a66

🟩 Sliding Window Algorithm: https://www.baeldung.com/cs/sliding-window-algorithm

🔥 LeetCode 674. Longest Continuous Increasing Subsequence: https://leetcode.com/problems/longest-continuous-increasing-subsequence/

➡️ Problem açıklaması:

Given an unsorted array of integers nums, return the length of the longest continuous increasing subsequence (i.e. subarray). The subsequence must be strictly increasing.

A continuous increasing subsequence is defined by two indices l and r (l less r) such that it is [nums[l], nums[l + 1], …, nums[r – 1], nums[r]] and for each l lessEqual i less r, nums[i] less nums[i + 1].

Example 1:

Input: nums = [1,3,5,4,7]

Output: 3

Explanation: The longest continuous increasing subsequence is [1,3,5] with length 3. Even though [1,3,5,7] is an increasing subsequence, it is not continuous as elements 5 and 7 are separated by element 4.

Example 2:

Input: nums = [2,2,2,2,2]

Output: 1

Explanation: The longest continuous increasing subsequence is [2] with length 1. Note that it must be strictly increasing.

Constraints:

0 <= nums.length <= 10^4

-10^9 <= nums[i] <= 10^9

Boş Zamanlarda Kod Yazmamak Beni Kötü Programcı Yapar mı?

Boş zamanlarımda kod yazmamak beni kötü bir programcı mı yapar? Sadece işte yaptığım programlama benim için yeterli olmaz mı? Bu ikisi arasındaki denge nasıl kurulur? Bir boyacı, boş zamanlarında da boya yaparak daha iyi bir boyacı mı olur? Bu konulardan bahsetmeye çalıştım bu videoda.

➡️ Videonun başında da bahsettiğim gibi, programlamada “pratik” yapmak gerçekten çok önemli. Belki de ben de bu yüzden Twitch‘te yaptığımız CodinGame yayınlarına oldukça önem veriyorum. Fakat “pratik” her şey demek değildir. Bunun yanında, programcı olarak kazanabileceğiniz önemli yetenekler de mevcut. Bunlara örnek olarak aşağıdakileri verebiliriz;

✨ Çalışma arkadaşlarınız ile ilişkileriniz

✨ Bir “takım oyuncusu” olmak

✨ Farklı bir programlama dili ve/veya framework öğrenmek

✨ Bir enstrüman çalmak

➡️ Bir diğer açıdan bakarsak, yazılım geliştirme sektöründe olan herkes bu işi severek yapmıyor. Bu sektörün maddi açıdan kendileri için yeterli bir getirisi olması bazı insanlar için en büyük nedenlerden biri. Bu kişilerin fikrimce potansiyellerinin yeterince kullanmadıklarını düşünüyorum. Çünkü bir çok insan, severek yaptıkları işler konusunda, bunlardan bir “hobi” oluşturma eğiliminde oluyorlar. Yani ben zaten severek yaptığım işi yapıyorum, bunun karşılığında bir ücret alıyorum, ek olarak “farklı bir şeyler de üretebilirim” düşüncesiyle bunu bir hobi haline getiriyorlar.

➡️ Tabi bu söylediklerimi, işyerinde yaptıkları işlerden tatmin olanları kapsamıyor. Eğer siz bu şanslı gruptaysanız, boş zamanlarınızda programlama yapmamak gayet doğal bir hal alır. Yine de, yazılım geliştirme gibi rekabetin olduğu bir ortamda, boş zamanlarında kendilerini farklı şekilde geliştiren kişiler ile rekabet etmek durumundasınız.

✨ Ayrıca Matt Might’ın “Tips for work-life balance” isimli yazısını okumanızı tavsiye ederim: http://matt.might.net/articles/work-life-balance/

✨ Stack Overflow’daki “Nobody has to lose in work/life balance” yazısı: https://stackoverflow.blog/2020/07/01/nobody-has-to-lose-in-work-life-balance/