题目
我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。
(这里,平面上两点之间的距离是欧几里德距离。)
例如:
输入:points = [[1,3],[-2,2]], K = 1
输出:[[-2,2]]
分析
如题也就是说,求出前K个离 (0,0)最近的点。
那就要排序。
距离如何排序?先用勾股定理求出距离。
ok,思路好了,接下来就是代码
class Solution {
public int[][] kClosest(int[][] points, int K) {
LinkedList<float[]> temp = new LinkedList<float[]>();
for (int i=0;i<points.length;i++){
float[] item = new float[]{i, getdistance(points[i])};
temp.add(item);
}
// 排序方法
temp.sort(new Comparator() {
@Override
public int compare(Object o, Object t1) {
float[] item1 = (float[]) o;
float[] item2 = (float[]) t1;
float res = (float) (item1[1]-item2[1]);
if (res>0)
return 1;
else
return -1;
}
});
// 组织返回值
int[][] res = new int[K][2];
for (int i=0;i<K;i++){
res[i]=points[(int) temp.get(i)[0]];
}
return res;
}
// 求距离的函数
public float getdistance(int[] point){
float sqrt2 = point[0]*point[0] + point[1]*point[1];
return (float) Math.sqrt(sqrt2);
}
}