สมมุติว่าเรามี n จุดในระนาบที่ต่างกันเป็นคู่ ตอนนี้ "บูมเมอแรง" เป็นทูเพิลของจุดเช่น (i, j, k) ซึ่งระยะห่างระหว่าง i และ j จะเท่ากับระยะห่างระหว่าง i และ k เราต้องหาจำนวนบูมเมอแรง
ดังนั้น หากอินพุตเป็น [[0,0],[1,0],[2,0]] เอาต์พุตจะเป็น 2 เนื่องจากบูมเมอแรงสองตัวคือ [[1,0],[0,0] ,[2,0]] และ [[1,0],[2,0],[0,0]].
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
counter_of_boomerangs :=0
-
สำหรับแต่ละ point_1 ในอาร์เรย์ของคะแนน ให้ทำ
-
x1, y1 =point_1
-
กำหนดแผนที่ที่เรียกว่า distance_count_dict
-
สำหรับแต่ละ point_2 ในอาร์เรย์ของคะแนน ให้ทำ
-
x2, y2 =point_2
-
diff_x :=x2 - x1
-
diff_y :=y2 - y1
-
dist :=diff_x^2 + diff_y^2
-
Distance_count_dict[ dist ] :=distance_count_dict[ dist ] + 1
-
-
สำหรับแต่ละ d ใน distance_count_dict −
-
n :=distance_count_dict[d]
-
counter_of_boomerangs :=counter_of_boomerangs + n * (n - 1)
-
-
-
ส่งคืนเคาน์เตอร์_of_boomerangs
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
from collections import defaultdict class Solution: def numberOfBoomerangs(self, points): counter_of_boomerangs = 0 for point_1 in points: x1, y1 = point_1 distance_count_dict = defaultdict( int ) for point_2 in points: x2, y2 = point_2 diff_x = x2-x1 diff_y = y2-y1 dist = diff_x ** 2 + diff_y ** 2 distance_count_dict[ dist ] += 1 for d in distance_count_dict: n = distance_count_dict[d] counter_of_boomerangs += n * (n-1) return counter_of_boomerangs ob = Solution() print(ob.numberOfBoomerangs([[0,0],[1,0],[2,0]]))
อินพุต
[[0,0],[1,0],[2,0]]
ผลลัพธ์
0