最接近原点的 K 个点

973. 最接近原点的 K 个点

题目描述:

我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。

(这里,平面上两点之间的距离是欧几里德距离。)

你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。

让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组:

  • A.length >= 3
    在 0 < i < A.length - 1 条件下,存在 i 使得:
    A[0] < A[1] < ... A[i-1] < A[i]
    A[i] > A[i+1] > ... > A[A.length - 1]
import numpy as np 

class Solution:
    def kClosest(self, points: List[List[int]], K: int) -> List[List[int]]:
        L = len(points)
        D = np.ones(L) * 10000 # points.length <= 10000
        index1 = np.empty(L)
        out = [[0 for i in range(2)] for i in range(K)]
        for i in range(len(points)):
            D[i] = points[i][0] ** 2 + points[i][1] ** 2
        index1 = np.argsort(D)
        for i in range(K):
            out[i] = points[index1[i]]
        return out

自己的想法:

  1. 计算出欧式距离,在进行排序并返回下标,对于下标进行去k个值,进行输出

为什么error:

  1. list assignment index out of range:另一种情况是:list是一个空的,没有一个元素,进行list[0]就会出现错误

    为什么不能赋值给空数组

    因为最小点<=points的长度,令D.length = points.length

    数组初始化

  2. index[i] = D.index(min(D)) 出错 ,D里面有空,不能比较?

    np的数组最小值下标返回

  3. 下标,np.argmin 返回的是浮点型的数,进行类型转换

  4. 直接输出排序下标:np.argsort

  5. 数组大小的问题,对于二维数组掌握不熟练

  6. 二维数组赋值为浮点数,要转换为整数 out.astype(int)

  7. np的初始化有问题,会初始化为浮点数,matrix = [[0 for i in range(3)] for i in range(3)] 初始化二维数组

解题思路:

python平方

返回最小位置的索引

二维数组

python一行代码 自定义排序

感想:

太慢了,二维数组的问题没有搞明白,以及对于numpy初始化数组的数组类型之前没有详细了解,导致浪费了很多时间。

快排+堆排序

posted @ 2021-04-09 10:17  Tonka  阅读(70)  评论(0编辑  收藏  举报