-
Notifications
You must be signed in to change notification settings - Fork 7
Description
Bu soru için, örnek resme bakmak soruyu anlamayı hızlandıracaktır.
https://leetcode.com/problems/campus-bikes/
Her işçiye, kendisine en yakın olan bisikleti atamak.
Atama işlemi, "bir bisiklete en yakın işçi"den başlanır.
Eğer iki işçi bir bisiklete aynı uzaklıkta ise, index'i küçük olan işçi o bisikleti alır.
İki bisiklet, bir işçiye en yakın uzaklıkta ise, index'i küçük olan bisiklet alınmalıdır.
Bir işçi veyâ bir bisiklet, x ve y koordinatları ile belirtiliyor.
Mesela
workers = [[0,0],[2,1]]: Burada ilk işçi x = 0 ve y = 0 koordinatlarında. İkinci işçi ise x= 2, y =1 koordinatlarında.
bikes = [[1,2],[3,3]]: Burada ilk bisiklet x = 1 ve y = 2 koordinatlarında. İkinci bisiklet ise x= 3, y =3 koordinatlarında.
Bu koordinatları grafikte gösterince, hangi işçinin hangi bisiklete daha yakın olduğu daha rahat görülür.
Ama biz, kod içerisinde Manhattan uzaklığı denilen basit bir yöntemle bu uzaklığı hesaplayacağız.
Örnek:
Burada, p1 ve p2 (x ve y koordinatları olan) iki ayrı nokta olsun. Bu noktaların Manhattan uzaklığı şöyle hesaplanır:
Manhattan(p1, p2) = |p1.x - p2.x| + |p1.y - p2.y|.
Mesela, yukarıdakilere göre,
1 -
ilk işçinin ilk bisiklete uzaklığı: |0 - 1| + |0 - 2| = 3
ilk işçinin ikinci bisiklete uzaklığı: |0 - 3| + |0 - 3| = 6
2-
ikinci işçinin ilk bisiklete uzaklığı: |2 - 1| + |1 - 2| = 2
ikinci işçinin ikinci bisiklete uzaklığı: |2- 3| + |1 - 3| = 3
Burada görüleceği üzere 2 en kısa mesafe olduğu için, ikinci işçi ilk bisikleti alır. İlk işçi ise ikinci bisikleti alır.