Computer >> Máy Tính >  >> Lập trình >> Python

Máy sưởi bằng Python

Giả sử chúng ta phải thiết kế một lò sưởi tiêu chuẩn với bán kính ấm cố định để sưởi ấm tất cả các ngôi nhà. Bây giờ, chúng ta đã cho vị trí của các ngôi nhà và lò sưởi trên một đường ngang, chúng ta phải tìm bán kính tối thiểu của các lò sưởi để tất cả các ngôi nhà có thể được bao phủ bởi những lò sưởi đó. Vì vậy, chúng tôi sẽ cung cấp nhà và máy sưởi riêng biệt và sản lượng dự kiến ​​của chúng tôi sẽ là tiêu chuẩn bán kính tối thiểu của máy sưởi.

Vì vậy, nếu đầu vào là [1,2,3,4], [1,4], thì đầu ra sẽ là 1 vì hai lò sưởi được đặt ở vị trí 1 và 4. Chúng ta phải sử dụng bán kính 1, sau đó tất cả những ngôi nhà có thể được sưởi ấm.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • sắp xếp các nhà trong danh sách

  • sắp xếp danh sách lò sưởi

  • res:=một mảng có kích thước giống như mảng nhà và điền vào mảng này bằng cách sử dụng inf

  • đối với tôi trong phạm vi từ 0 đến kích thước của ngôi nhà, hãy làm

    • h:=nhà [i]

    • ind:=trái nhất chỉ mục để chèn h vào lò sưởi để danh sách đó vẫn được sắp xếp

    • nếu ind bằng với kích thước của lò sưởi thì

      • res [i]:=tối thiểu res [i], | h - máy sưởi [-1] |

    • ngược lại khi ind giống 0 thì

      • res [i]:=tối thiểu res [i], | h - máy sưởi [0] |

    • nếu không,

      • res [i]:=tối thiểu của res [i], | h - máy sưởi [ind] | , | h - máy sưởi [ind-1] |

  • trả lại tối đa res

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau đây để hiểu rõ hơn -

 from bisect import bisect_leftclass Giải pháp:def findRadius (self, homes, heaters):homes.sort () heaters.sort () res =[float ('inf')] * len (nha) cho tôi trong phạm vi (len (nhà)):h =homes [i] ind =bisect_left (máy sưởi, h) if ind ==len (máy sưởi):res [i] =min (res [i], abs (h - máy sưởi [-1]) ) elif ind ==0:res [i] =min (res [i], abs (h - máy sưởi [0])) else:res [i] =min (res [i], abs (h - máy sưởi [ind ]), abs (h - máy sưởi [ind-1])) trả về max (res) ob =Solution () print (ob.findRadius ([1,2,3,4], [1,4]))  

Đầu vào

 [1,2,3,4], [1,4] 

Đầu ra

 1