0
点赞
收藏
分享

微信扫一扫

【LeeCode】973. 最接近原点的 K 个点

程序员伟杰 2022-12-12 阅读 73

【题目描述】

给定一个数组 ​​points​​​ ,其中 ​​points[i] = [xi, yi]​​ 表示 X-Y 平面上的一个点,并且是一个整数 ​​k​​​ ,返回离原点 ​​(0,0)​​​ 最近的 ​​k​​ 个点。

这里,平面上两点之间的距离是 欧几里德距离( ​​√(x1 - x2)2 + (y1 - y2)2​ )。

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

​​https://leetcode.cn/problems/k-closest-points-to-origin/​​


【示例】

【LeeCode】973. 最接近原点的 K 个点_i++


【代码】

admin

package com.company;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

class Solution {

public int[][] kClosest(int[][] points, int k) {
int[][] res = null;
Map<Integer, Integer> map = new HashMap<>();

for (int i = 0; i < points.length; i++){
int tmp = (int)(Math.pow(points[i][0], 2) + Math.pow(points[i][1], 2));
map.put(i, tmp);
}

List<Map.Entry<Integer, Integer>> collect = map.entrySet().stream().sorted(new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o1.getValue() - o2.getValue();
}
}).collect(Collectors.toList());

// System.out.println(map.toString());
List<int[]> list = new ArrayList<>();
int count = 1;
if (collect.size() != 1){
for(Map.Entry<Integer, Integer> x: collect){
if (count <= k){
int[] t = points[x.getKey()];
list.add(t);
count++;
}
}
}else {
list.add(points[0]);
}
res = new int[list.size()][];
for(int i = 0; i < list.size(); i++){
res[i] = list.get(i);
}

// for (int i = 0; i < res.length; i++) {
// System.out.println(Arrays.toString(res[i]));
// }
return res;
}
}

public class Test {
public static void main(String[] args) {
int[][] arr = {{3,3}, {5, -1}, {-2, 4}};
int k = 2;
new Solution().kClosest(arr, k);
}
}



举报

相关推荐

0 条评论