当前位置: 首页 > news >正文

网站主机选择98建筑人才网

网站主机选择,98建筑人才网,wordpress 付费会员分类,wordpress 主页不显示图片1.题目描述 给定一个点的列表 points,其中每个点的坐标表示为 [xi, yi],以及一个整数 k,表示需要找到距离原点 (0,0) 最近的 k 个点。 2.思路 思路一: 首先输入是一个二维数组,然后开始计算二维数组忠每个元素(每…

1.题目描述

给定一个点的列表 points,其中每个点的坐标表示为 [xi, yi],以及一个整数 k,表示需要找到距离原点 (0,0) 最近的 k 个点。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.思路

思路一:
首先输入是一个二维数组,然后开始计算二维数组忠每个元素(每一个点)与原点直接的距离(可以直接对每个点求勾股定理),最后输出是离原点距离最近的点(k代表返回的点的个数),按升序排序。

思路二:
用优先级队列[PiorityQueue默认是小根堆,但是可以改变比较器的规则(comparetor,让他变成大根堆)。],把每个坐标的欧式距离入堆之后,用对象.size()的方法,列出总共的元素,根据题目要求要前k跟原点近的点的欧式距离,保留前k个,其他用对象.poll()按最大开始剔除,直到剩最小的k个,最后用一个二维数组输出。
在这里插入图片描述
在这里插入图片描述

在 PriorityQueue 中,标准的 poll() 方法并不接受任何参数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.代码实现

import java.util.PriorityQueue;public class Solution06 {public int[][] kClosest(int[][] points, int k) {// 创建最大堆,按照 (x² + y²) 从大到小排序,创建和声明最大堆,此时堆是空的PriorityQueue<int[]> s1=new PriorityQueue<>((a,b)->Integer.compare(distance(b),distance(a)));//遍历每个点,联系:一个求距离的算法。for(int[] point:points){s1.offer(point);//加入堆if (s1.size()>k){s1.poll();//只保留最近的 k 个点,也就是把大根堆大的点剔除掉,剩下k个小的元素}}//输出剩下的k个二维数组,有k个点,2代表每个坐标都有x,y,也就是两列int[][] reasult=new int[k][2];int index=0;for(int[] subpoint:s1){reasult[index]=subpoint;index++;}return reasult;
//        int[][] result = new int[k][2];
//        for (int i = 0; i < k; i++) {
//            result[i] = s1.poll();
//        }
//        return result;}private static int distance(int[] point){return point[0]*point[0]+point[1]*point[1];}}

带main方法验证的代码:

import java.util.PriorityQueue;
import java.util.Arrays;
public class Solution06 {public int[][] kClosest(int[][] points, int k) {// 创建最大堆,按照 (x² + y²) 从大到小排序,创建和声明最大堆,此时堆是空的PriorityQueue<int[]> s1=new PriorityQueue<>((a,b)->Integer.compare(distance(b),distance(a)));//遍历每个点,联系:一个求距离的算法。for(int[] point:points){s1.offer(point);//加入堆if (s1.size()>k){s1.poll();//只保留最近的 k 个点,也就是把大根堆大的点剔除掉,剩下k个小的元素}}//输出剩下的k个二维数组,有k个点,2代表每个坐标都有x,y,也就是两列int[][] reasult=new int[k][2];int index=0;for(int[] subpoint:s1){reasult[index]=subpoint;index++;}return reasult;
//        int[][] result = new int[k][2];
//        for (int i = 0; i < k; i++) {
//            result[i] = s1.poll();
//        }
//        return result;}private static int distance(int[] point){return point[0]*point[0]+point[1]*point[1];}public static void main(String args[]){Solution06 test=new Solution06();int[][] point1={{1, 3}, {-2, 2}};int k1=1;System.out.println("输出与原点最近的点:");printResult(test.kClosest(point1,k1));}// 打印二维数组的方法private static void printResult(int[][] result) {
//        for (int[] point : result) {
//            System.out.println(Arrays.toString(point));
//        }
//        System.out.println();for(int[] rePoint:result){System.out.println(Arrays.toString(rePoint));}}}

带main方法的测试代码:

import java.util.PriorityQueue;
import java.util.Arrays;
public class Solution06 {public int[][] kClosest(int[][] points, int k) {// 创建最大堆,按照 (x² + y²) 从大到小排序,创建和声明最大堆,此时堆是空的PriorityQueue<int[]> s1=new PriorityQueue<>((a,b)->Integer.compare(distance(b),distance(a)));//遍历每个点,联系:一个求距离的算法。for(int[] point:points){s1.offer(point);//加入堆if (s1.size()>k){s1.poll();//只保留最近的 k 个点,也就是把大根堆大的点剔除掉,剩下k个小的元素}}//输出剩下的k个二维数组,有k个点,2代表每个坐标都有x,y,也就是两列int[][] reasult=new int[k][2];int index=0;for(int[] subpoint:s1){reasult[index]=subpoint;index++;}return reasult;
//        int[][] result = new int[k][2];
//        for (int i = 0; i < k; i++) {
//            result[i] = s1.poll();
//        }
//        return result;}private static int distance(int[] point){return point[0]*point[0]+point[1]*point[1];}//   public static void main(String args[])
//   {
//       Solution06 test=new Solution06();
//       int[][] point1={{1, 3}, {-2, 2}};
//       int k1=1;
//       System.out.println("输出与原点最近的点:");
//       printResult(test.kClosest(point1,k1));
//
//   }
//    // 打印二维数组的方法
//    private static void printResult(int[][] result) {
        for (int[] point : result) {
            System.out.println(Arrays.toString(point));
        }
        System.out.println();
//        for(int[] rePoint:result)
//        {
//            System.out.println(Arrays.toString(rePoint));
//        }
//    }public static void main(String[] args) {Solution06 solution = new Solution06();int[][] points1 = {{1, 3}, {-2, 2}};int k1 = 1;System.out.println("Test Case 1:");int[][] result1 = solution.kClosest(points1, k1);for (int[] point : result1) {System.out.println(Arrays.toString(point));}System.out.println();int[][] points2 = {{3, 3}, {5, -1}, {-2, 4}};int k2 = 2;System.out.println("Test Case 2:");int[][] result2 = solution.kClosest(points2, k2);for (int[] point : result2) {System.out.println(Arrays.toString(point));}System.out.println();}}
http://www.dtcms.com/a/457862.html

相关文章:

  • Windows中在QTCreator中调试,提示缺少debug information files问题的解决
  • 做宠物店网站的素材seo一级域名和二级域名
  • 施工工地云监管平台,工程建设现场管理,智慧工地云平台源码,以AI、物联网、BIM技术为手段,对施工现场进行立体化、全方位、全时段管理
  • 用单调栈高效解决 “首尾均为最大值” 的子数组计数问题(Leetcode 3113)
  • 企业网站自己可以做吗wordpress 登陆 插件
  • 初学c#-c#和.NET Framework - onecopper
  • 大沥南庄网站建设网站开发建设流程
  • nvMolKit:一套基于GPU加速的RDKit核心函数集
  • LOBE-GS:分块致密化效率提升
  • 福州建设招聘信息网站pt网站怎么下载与做
  • dede免费手机网站模板象山seo的优化
  • 央视支持新消费模式:积分助力商家锁客,复购率翻倍
  • 专业政务软件开发北京移动端网站优化
  • 怎样提高网站访问速度一起做网站欧洲站
  • 公司网站建设费属于宣传费吗重庆专业的网站建设公司
  • 广西网站建设哪里好wordpress消息通知
  • 海南网站建设网站开发网站建设的流程步骤
  • 吴恩达机器学习课程(PyTorch适配)学习笔记:1.5 决策树与集成学习
  • 网站推广营销方法成都网站建设 致尚
  • 常州网站建设网站做网站必须要加v吗
  • 理想星环 OS 深度解析:开源浪潮下的智能汽车操作系统革命
  • Qt开发的应用程序编译链接Fast DDS库
  • 网站开发人员属于旅行社手机网站建设成
  • VBA经典应用69例应用9:Preserve关键字利用,保留原值
  • WebRTC 入门与实战(三)之高级篇
  • 二:RAG 的 “语义密码”:向量、嵌入模型与 Milvus 向量数据库实操
  • 一元夺宝网站建设企业网站建设方案对比汇报
  • 《道德经》第十二章
  • 点击图片进入网站要怎么做做网站老板嫌弃太丑谁的锅
  • 如何在ubuntu20.04配置动态壁纸和bongoCat