Kは、原点に最も近いポイントleetcode-973-

件名の説明:

 

 

 

 タイトル215:を参照してもよいです

方法の一つ:ソート

クラスソリューション:
     DEF kClosest(自己、ポイント:リスト[リストの[int]、K:INT) - > リスト[リスト[INT]:
        points.sort(キー = ラムダ P:P [0] ** 2 + P [1] ** 2 リターンポイント[:K]

クイックエキゾースト+の分割統治:

クラスのソリューション:
     DEF kClosest(セルフは、ポイント:リストを[一覧[INT]]、K:INT) - > 一覧[一覧[INT]:
        ユークリッド距離を計算する 
        距離= ラムダ I:ポイント[I]を[0 ] ** 2 + [I]ポイント[1] ** 2はDEF (I、J、K)を動作:
             IF I> J:
                 リターン#1 レコード初期値 
            OI、OJ = I、J
             #のテイクセンチネル値は、左端のある 
            ピボット= 距離(OI)
             しばらく私は=!J:
                 しばらくは私が<J の距離(J)> = ピボット:
        
        
            
                    J - = 1。
                 一方、 IはJ < の距離(I)<= ピボット:
                    I。+ = 1
                 IF Iに< J:
                    交換値 
                    ポイント[I]、ポイント[J] = ポイント[j]は、ポイント[I] 
                
            交換センチネル 
            ポイント[I]、ポイント[OI] = ポイントは、[OI]は、[I]ポイント
            
            #の再帰を
            IF K <=私は- OI + 1。 :半分ソートまま 
                作業(OI、私は- 1。、K)
             #の右ソート半分
                ワーク(I + 1は、OJ、K - (私は- OI + 1 ))
                
        の仕事(0、LEN(ポイント) - 1 、K)
         リターンポイント[:K]

方法3:ヒープソート

heapqのインポートheappush、heappop 

クラスソリューション:
     DEF kClosest(自己、ポイント:リスト[リストの[int]、K:INT) - > リスト[リスト[INT]:
        キュー = [] 
        距離 = ラムダ X:ポイント[X ] [0] ** 2つの+ポイント[X] [1] ** 2  = LEN(ポイント)
         のための I における範囲(長さ):
            heappush(キュー、(距離(I)、ポイント[I]))
        RES = []
         のための I における範囲(K):
            res.append(heappop(キュー)[ 1])
         戻り RES

 

おすすめ

転載: www.cnblogs.com/oldby/p/11641068.html