Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのヒーター


すべての家を暖めるために、固定された暖かい半径を持つ標準的なヒーターを設計する必要があるとします。これで、家とヒーターの位置を水平線上に指定しました。すべての家がこれらのヒーターで覆われるように、ヒーターの最小半径を見つける必要があります。そのため、住宅とヒーターを別々に提供し、予想される出力はヒーターの最小半径標準になります。

したがって、入力が[1,2,3,4]、[1,4]の場合、2つのヒーターが位置1と4に配置されているため、出力は1になります。半径1を使用する必要があります。その後、すべて家を暖めることができます。

これを解決するには、次の手順に従います-

  • リストハウスを並べ替える

  • リストヒーターを並べ替える

  • res:=家の配列と同じサイズの配列で、infを使用してこれを埋めます

  • 0から家のサイズまでの範囲のiの場合、実行します

    • h:=家[i]

    • ind:=リストがソートされたままになるように、ヒーターにhを挿入するために最も左のインデックス

    • indがヒーターのサイズと同じである場合、

      • res [i]:=最小のres [i]、|h-ヒーター[-1]|

    • それ以外の場合、indが0と同じ場合、

      • res [i]:=最小のres [i]、|h-ヒーター[0]|

    • それ以外の場合

      • res [i]:=最小のres [i]、|h-ヒーター[ind]| 、|h-ヒーター[ind-1]|

  • 最大解像度を返す

理解を深めるために、次の実装を見てみましょう-

from bisect import bisect_left
class Solution:
   def findRadius(self, houses, heaters):
      houses.sort()
      heaters.sort()
      res = [float('inf')]*len(houses)
      for i in range(len(houses)):
         h = houses[i]
         ind = bisect_left(heaters, h)
         if ind==len(heaters):
            res[i] = min(res[i], abs(h - heaters[-1]))
         elif ind == 0:
            res[i] = min(res[i], abs(h - heaters[0]))
         else:
            res[i] = min(res[i], abs(h - heaters[ind]), abs(h - heaters[ind-1]))
      return max(res)

ob = Solution()
print(ob.findRadius([1,2,3,4],[1,4]))

入力

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

出力

1

  1. Pythonのissuperset()

    この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',

  2. Pythonのアンダースコア(_)

    Pythonでは、シングルアンダースコア(_)を使用する場合もあれば、ダブルアンダースコア(__)を使用する場合もあります。 Pythonでは、アンダースコアを使用する次のケースがあります。 最後の式の値をインタープリターに格納する場合。 一部の値を無視したい場合。 変数または関数の宣言用。 数値の横方向の値の桁を区切るため。 「国際化(i18n)」または「ローカリゼーション(l10n)」機能としても使用されます。 今度はすべての場合のいくつかの例。 インタプリタで使用 Pythonインタープリターは、最後の式の値を「_」に格納します。 >>> 20 20 &