Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

จำนวนบูมเมอแรงใน Python


สมมุติว่าเรามี 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