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.
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?
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.
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.
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 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.
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.
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.
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.
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.
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ş.
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
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.
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].