LeetCode Çözümleri – 881. Boats to Save People

LeetCode içerisinde bulunan “Boats to Save People” sorusunun açıklaması ve çözümü. Her bir bot aynı anda en fazla 2 kişiyi taşıma koşulu ile, kişilerin ağırlığı ve her bir botun taşıma kapasitesi verildiği taktirde, tüm kişileri taşımak için en az kaç bota ihtiyacınız olduğu soruluyor.

► LeetCode 881. Boats to Save People: https://leetcode.com/problems/boats-to-save-people/

► Problem açıklaması:

The i-th person has weight people[i], and each boat can carry a maximum weight of limit.

Each boat carries at most 2 people at the same time, provided the sum of the weight of those people is at most limit.

Return the minimum number of boats to carry every given person. (It is guaranteed each person can be carried by a boat.)

Example 1:

Input: people = [1,2], limit = 3

Output: 1

Explanation: 1 boat (1, 2)

Example 2:

Input: people = [3,2,2,1], limit = 3

Output: 3

Explanation: 3 boats (1, 2), (2) and (3)

Example 3:

Input: people = [3,5,3,4], limit = 5

Output: 4

Explanation: 4 boats (3), (3), (4), (5)

Note:

1 <= people.length <= 50000

1 <= people[i] <= limit <= 30000

LeetCode Çözümleri – 724. Find Pivot Index

LeetCode içerisinde bulunan “Find Pivot Index” sorusunun açıklaması ve çözümü. Pivot index, sağındaki ve solundaki elemanların toplamı eşit olan eleman anlamındadır. Size verilen bir tamsayı dizisinde, varsa pivot elemanının index’ini bulmanız isteniyor.

► LeetCode 724. Find Pivot Index: https://leetcode.com/problems/find-pivot-index/

► Problem açıklaması:

Given an array of integers nums, write a method that returns the “pivot” index of this array.

We define the pivot index as the index where the sum of all the numbers to the left of the index is equal to the sum of all the numbers to the right of the index.

If no such index exists, we should return -1. If there are multiple pivot indexes, you should return the left-most pivot index.

Example 1:

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

Output: 3

Explanation: The sum of the numbers to the left of index 3 (nums[3] = 6) is equal to the sum of numbers to the right of index 3. Also, 3 is the first index where this occurs.

Example 2:

Input: nums = [1,2,3]

Output: -1

Explanation: There is no index that satisfies the conditions in the problem statement.

Constraints:

The length of nums will be in the range [0, 10000].

Each element nums[i] will be an integer in the range [-1000, 1000].

LeetCode Çözümleri – 728. Self Dividing Numbers

LeetCode içerisinde bulunan “Self Dividing Numbers” sorusunun açıklaması ve çözümü. Bu soruda size verilen bir sayının, içerdiği tüm rakamlara tam olarak bölünüp bölünmediğini (0 hariç) soruluyor.

► LeetCode 728. Self Dividing Numbers: https://leetcode.com/problems/self-dividing-numbers/

► Problem açıklaması:

A self-dividing number is a number that is divisible by every digit it contains.

For example, 128 is a self-dividing number because 128 % 1 == 0, 128 % 2 == 0, and 128 % 8 == 0.

Also, a self-dividing number is not allowed to contain the digit zero.

Given a lower and upper number bound, output a list of every possible self dividing number, including the bounds if possible.

Example 1:

Input: left = 1, right = 22

Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]

Note: The boundaries of each input argument are 1 <= left <= right <= 10000.

C# 9.0 Yenilikleri – Top-level Statements

C# 9.0 versiyonu ile gelen “top-level statements” özelliğine göz attık videoda. Özellikle C#’a yeni başlayan kişiler için kod yazmayı daha basit hale getirdiğini düşündüğüm bir yapı.

Şimdi boş bir konsol uygulaması oluşturduğunuz düşünelim, karşınıza gelen kod bloğu şu şekilde oluyor;

using System;

namespace ConsoleNetCoreTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Yeni başlayan kişiler için, using, namespace, static, void, Main, diziler, args gibi birçok bilmediği yapı var bu boilerplate kod içerisinde. Bunlar kafa karıştırıcı olabiliyor.

.NET 5 ile birlikte gelen C# 9.0 versiyonunda, statement’ları direkt olarak dosyanızın en üstünde yazabiliyorsunuz. Bu nedenle namespace, class, Main gibi kısımları yazmamanıza gerek kalmıyor. Bu sayede başlangıç seviyesindeki kişiler için daha basit bir şekilde kod yazma imkanı oluşuyor.

.NET 5 ile geldiği için öncelikle .csproj dosyanızdaki “TargetFramework” kısmını “net5.0” olarak düzenlemeniz gerekiyor. Tabi bunu videodaki gibi projenin properties kısmından da düzenleyebiliyorsunuz .NET 5.0’ı seçerek.

using System;
Console.WriteLine("Hello World!");

Peki Main metodu olmadan işletim sistemi başlangıç noktasını nereden biliyor? Aslında IL koduna baktığınızda, hala compiler arka tarafta “Program” adında bir sınıf ve “Main” adında bir metod oluşturuyor. Sadece bunun açık bir şekilde yazılmasına gerek kalmıyor artık. Hatta “args” kısmını da direkt olarak kullanabiliyorsunuz sihirli bir şekilde. Örneğin command line üzerinden parametre gönderdiğinizde “args” ile bunları direkt alabiliyorsunuz.

using System;
if (args.Length != 0)
{
    foreach (var arg in args)
    {
        Console.WriteLine(arg);
    }
}

Birkaç kural;

► Sadece tek bir dosyanız top-level statement’a sahip olabiliyor “Main” mantığı gereği. Bir başka dosya içerisinde top-level statement yazmaya çalıştığınızda hata alıyorsunuz.

► Top-level statement’lar, içerisinde kullandığınız başka sınıf tanımlarının da üstünde olmalıdır. Önce sınıf tanımını yapıp sonra statement’ı yazdığınızda hata alırsınız. Hatta bu tanımlamaları yaptığınız IL koduna bakarsanız, bu Person sınıfının sanki farklı bir .cs dosyası içerisindeymiş gibi oluştuğunu görürsünüz. Yani C# derleyicisi önce bi “top-level statements”ları alıp, Program sınıfı ve Main metodu için derler, geri kalan tiplerin hepsini de ayrı bir C# tipi gibi derleme yapar.

► Son söz olarak;

Bence bu özellik C# dili ile daha kolay bir şekilde “oynamamızı” sağlıyor. Özellikle C#’ı yeni öğrenmeye başlayan kişiler için ve küçük kod yazımları bakımından gayet faydalı olduğunu düşünüyorum. Kaynaklar:

► Top-level statements: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/top-level-statements

► Exploring top-level statements in C# 9 https://www.tabsoverspaces.com/233831-exploring-top-level-statements-in-csharp-9

► Exploring top-level statements in C# 9 https://www.reddit.com/r/programming/comments/h0uycm/exploring_toplevel_statements_in_c_9/

► İncelemek isterseniz Linqpad: https://www.linqpad.net/

LeetCode Çözümleri – 226. Invert Binary Tree

LeetCode içerisinde bulunan “Invert Binary Tree” sorusunun açıklaması ve çözümü. Bu soruda size verilen bir binary tree‘i tersine çevirmeniz isteniyor. Binary tree yapısı ile en sık karşılaşabileceğiniz soru tipi. Rekürsif yapı ile mantığını oturtursanız çok kolay anlaşılabiliyor.

✨ Binary tree nedir?

In computer science, a binary tree is a tree data structure in which each node has at most two children, which are referred to as the left child and the right child.

➡️ Binary Tree Data Structure: https://www.geeksforgeeks.org/binary-tree-data-structure/

➡️ Binary Trees: https://www.cmpe.boun.edu.tr/~akin/cmpe223/chap4.htm

➡️ Binary Trees by Nick Parlante: http://cslibrary.stanford.edu/110/BinaryTrees.html

✨ LeetCode 226. Invert Binary Tree: https://leetcode.com/problems/invert-binary-tree/

➡️ Problem açıklaması:

Invert a binary tree.

Example:

Input:

4

/ \

2 7

/ \ / \

1 3 6 9

Output:

4

/ \

7 2

/ \ / \

9 6 3 1

Trivia:

This problem was inspired by this original tweet (https://twitter.com/mxcl/status/608682016205344768) by Max Howell:

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so f*** off.

LeetCode Çözümleri – 509. Fibonacci Number

LeetCode içerisinde bulunan “Fibonacci Number” sorusunun açıklaması ve çözümü. Bu soruda sizden N. sıradaki fibonacci sayısını bulmanız isteniyor.

✨ Fibonacci dizisi nedir?

Fibonacci dizisi, her sayının kendinden önceki ile toplanması sonucu oluşan bir sayı dizisidir.

Kaynak: https://tr.wikipedia.org/wiki/Fibonacci_dizisi

✨ LeetCode 509. Fibonacci Number: https://leetcode.com/problems/fibonacci-number/

➡️ Problem açıklaması:

The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1. That is,

F(0) = 0,

F(1) = 1

F(N) = F(N – 1) + F(N – 2), for N biggerThan 1.

Given N, calculate F(N).

Example 1:

Input: 2

Output: 1

Explanation: F(2) = F(1) + F(0) = 1 + 0 = 1.

Example 2:

Input: 3

Output: 2

Explanation: F(3) = F(2) + F(1) = 1 + 1 = 2.

Example 3:

Input: 4

Output: 3

Explanation: F(4) = F(3) + F(2) = 2 + 1 = 3.

Note: 0 <= N <= 30.

LeetCode Çözümleri – 1200. Minimum Absolute Difference

LeetCode içerisinde bulunan “Minimum Absolute Difference” sorusunun açıklaması ve çözümü. Bu soruda dizi içerisinde verilen sayılardan iki sayının arasındaki en az farka sahip olan tüm sayı çiftlerini geri döndürmeniz isteniyor.

✨ LeetCode 1200. Minimum Absolute Difference: https://leetcode.com/problems/minimum-absolute-difference/

➡️ Problem açıklaması:

Given an array of distinct integers arr, find all pairs of elements with the minimum absolute difference of any two elements.

Return a list of pairs in ascending order(with respect to pairs), each pair [a, b] follows

1️⃣ a, b are from arr

2️⃣ a less b

3️⃣ b – a equals to the minimum absolute difference of any two elements in arr

Example 1:

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

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

Explanation: The minimum absolute difference is 1. List all pairs with difference equal to 1 in ascending order.

Example 2:

Input: arr = [1,3,6,10,15]

Output: [[1,3]]

Example 3:

Input: arr = [3,8,-10,23,19,-4,-14,27]

Output: [[-14,-10],[19,23],[23,27]]

İş Görüşmelerinde Kendinizi Nasıl Tanıtmalısınız?

Arada sırada yeni insanlarla tanıştığımız ve kendimizi tanıtmak zorunda kaldığımız için çoğumuz kendimizi tanıtmaya yabancı değiliz. Bununla birlikte, iş görüşmelerinde kendini tanıtmak gerçek hayattan biraz farklıdır, bu yüzden bunu kendi avantajımıza çevirmemiz gerekiyor bence.

Görüşmelerde bildiğim kadarıyla şu sorular çok soruluyor;

✔️ Bana programcı geçmişinden bahseder misin?

✔️ Kodlamaya nasıl ilgi duydun ve mobil geliştirme neden senin için uygun oldu?

✔️ Bu bizim şirket hedeflerimize nasıl uygun olur?

Burada kullanacağımız yöntem “Elevator pitch” olmalı. https://en.wikipedia.org/wiki/Elevator_pitch

➡️ Elevator pitch nedir peki?

Bu kavram, bu bir gazetecinin bir editöre fikir sunması için asansördeki 30 saniyesini nasıl en iyi şekilde kullanacağına dayanır. Bu kavrama göre;

✔️ Kısa – Sınırlı zamanınız var!

✔️ Doğrudan – Sınırlı süreniz olduğundan, direkt konuya gelmelisiniz.

✔️ Dikkat çekme – En çekici fikirlerini sunma

İster onlarca başka adayla bir iş görüşmesinde ve zamanınız kısıtlı olsun, ya da potansiyel bir müşteriye kim olduğunuzu açıklıyor olun, bilgi ve becerilerinizi hızlı ve net bir şekilde açıklayabilmeniz sizin için harika bir özelliktir.

➡️ Format nasıl olmalı peki?

✔️ Mevcut veya en son görevinizle ilgili bir cümle.

✔️ Geçmişiniz hakkında birkaç cümle. Neye odaklandın bu süreçte?

✔️ Nerede çalıştın? Hangi projelerle uğraştın? Tipik zorluklar ve görevler nelerdi? Hangi teknolojileri kullandın?

✔️ Neden yeni bir iş fırsatı aradığınızı ve başvurduğunuz pozisyonla neden ilgilendiğinizi belirten bir açıklama ile bitirin.

ÖRNEK BİR KENDİNİ TANITMA

Merhaba, ben Soner, İstanbul Üniversitesi Bilgisayar Mühendisliği bölümünden 2011 yılında mezun oldum. İlgi alanlarım backend yazılım geliştiriciliği ve iyi kullanıcı deneyimi ve performanslı ürünler geliştirmek.

İlk olarak Scania Turkey bünyesinde, finans raporlamaları üreten uygulamalar üzerine çalıştım. Ardından Akbank’ta önce açık sistemler veri saklama ve veri yedekleme üzerine, ardından izleme sistemlerinde monitoring uygulamaları geliştirdim. Şu anda mobil ekibinde, bankanın kampanya bazlı uygulaması olan Axess Mobil’in backend geliştiricilerinden biriyim.

Şirketinizdeki X pozisyonu ile ilgilieniyorum çünkü hali hazırda bu teknolojileri kullanıyorum ve şirketinizin açık kaynak kod kültürünü destekliyorum.

Birkaç ufak not;

➡️ En sevdiğiniz ve/veya en etkileyici projelerden, bazı önemli noktaları anlatın ve etkileyiciyse “sayıları” veya üstesinden geldiğiniz zorlukları dahil edin.

➡️ Ve son olarak, konuşmanız için pratik yapmalısınız! Becerilerinizin harika ve kısa bir özetine sahip olmak bu konuda çok önemlidir. Hızlı ama takip etmesi kolay bir hızda pratik yapmalısınız.

LeetCode Çözümleri – 198. House Robber

LeetCode içerisinde bulunan “House Robber” sorusunun açıklaması ve çözümü. Bu soruda profesyonel bir hırsız olduğunuzu düşünün. Size verilmiş evlerden, içerisindeki parayı soymak istiyorsunuz, fakat art arda olan evleri soyarsanız alarm çalışıyor ve polise haber veriyor. Bu kurala bağlı olarak, elde edebileceğiniz maksimum para miktarını bulmanız gerekiyor.

✨ LeetCode 198. House Robber: https://leetcode.com/problems/house-robber/

➡️ Problem açıklaması:

You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night.

Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.

Example 1:

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

Output: 4

Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3). Total amount you can rob = 1 + 3 = 4.

Example 2:

Input: nums = [2,7,9,3,1]

Output: 12

Explanation: Rob house 1 (money = 2), rob house 3 (money = 9) and rob house 5 (money = 1). Total amount you can rob = 2 + 9 + 1 = 12.

Constraints:

0 <= nums.length <= 100

0 <= nums[i] <= 400

LeetCode Çözümleri – 1207. Unique Number of Occurrences

LeetCode içerisinde bulunan “Unique Number of Occurrences” sorusunun açıklaması ve çözümü. Size verilen tamsayı dizisinde bulunan tüm sayılardan, adet olarak hepsinin birbirinden farklı olup olmadığı soruluyor.

✨ LeetCode 1207. Unique Number of Occurrences: https://leetcode.com/problems/unique-number-of-occurrences/

➡️ Problem açıklaması:

Given an array of integers arr, write a function that returns true if and only if the number of occurrences of each value in the array is unique.

Example 1:

Input: arr = [1,2,2,1,1,3]

Output: true

Explanation: The value 1 has 3 occurrences, 2 has 2 and 3 has 1. No two values have the same number of occurrences.

Example 2:

Input: arr = [1,2]

Output: false

Example 3:

Input: arr = [-3,0,1,-3,1,1,1,-3,10,0]

Output: true

Constraints:

1 <= arr.length <= 1000

-1000 <= arr[i] <= 1000