LeetCode 973 最接近原点的K个点

【详细】芯片设计全流程(包括每个流程需要用到的工具以及需要参与的工作人员) 一颗芯片的诞生经历了设计、制造和测试(分别对应集成电路产业链的设计业、制造业和封测业),而每一步都包含了复杂的步骤和流程。 图0-1 集成电路产业链 现在,我们重点介绍芯片设计的全流程以及每个流程需要用到的设计工具和需要参与的工作人员。 一、IC设计分类 首先对IC设计的分类做个介绍,如图1-1所示。 图1-1 IC设计分类 如图1-1所示,IC设计可以粗分为数字IC设计和射频/模拟IC设计,数字IC设计又可分为ASIC设计和FPGA/CPLD设计,此外还有一部分IC设计. 阅读详情

题目信息

LeetoCode地址: . - 力扣(LeetCode)

题目理解

题意简单且直观,而且是很经典的考验快速排序以及堆排序的算法题,很考验基本功。

堆排序写法

对points数组原地建立小顶堆

并依次弹出第1个元素,重新调整堆顶元素,再弹出第1个。。。直到弹出前K个元素。

时间复杂度: O(nlogn)

额外空间复杂度:O(k)

class Solution {
    int[][] points;
    public int[][] kClosest(int[][] points, int k) {
        this.points = points;
        buildMinHeap(points, points.length);
        int[][] res = new int[k][2];
        int lastIndex =points.length-1;
        for (int i = 0; i<k; i++) {
            res[i] = points[0];
            swap(0, lastIndex--);
            minHeapify(0, lastIndex+1);
        }
        return res;
    }
    public void buildMinHeap(int[][] points, int length) {
        for (int i = points.length/2; i>=0; i--) {
            minHeapify(i, length);
        }
    }
    public void minHeapify(int i, int length) {
        int l = i*2+1, r = i*2+2;
        int min = i;
        int minLength = points[i][0]*points[i][0] + points[i][1]*points[i][1];
        int lMinLength = l < length ? points[l][0]*points[l][0] +points[l][1] * points[l][1] : Integer.MAX_VALUE;
        int rMinLength = r < length ? points[r][0]*points[r][0] +points[r][1] * points[r][1] : Integer.MAX_VALUE;
        if (lMinLength < minLength) {
            min = l;
            minLength = lMinLength;
        }
        if (rMinLength < minLength) {
            min = r;
        }
        if (i != min) {
            swap(i, min);
            minHeapify(min, length);
        }
    }
    void swap(int a, int b) {
        int[] tmp = points[a];
        points[a] = points[b];
        points[b] = tmp;
    }
}

快速排序写法

普通的写法是直接对整个数组排序,然后取前k个元素,然而这不是最高效的。

由于我们仅需要前k个元素,而且不关注顺序,因此可以省略到k之后元素的顺序。

假如我们当前左右边界分别是l和r,在快排中间步骤中,确认了j位置元素的值后,如果发现k <= j, 则无需再关注j到r之间元素的排序结果;

类似的,假如k > j, 那我们也无需再关注l到j之间的元素,因为我们已经确认了他们必定会出现在最终结果集中。

时间复杂度:O(n), 由于我们没有进行任何多余元素的排序动作。

额外空间复杂度:O(1), 我们是在原地进行排序,没有使用额外空间。

    int k;
    int[][] points;
    public int[][] kClosest(int[][] points, int k) {
        this.k = k;
        this.points = points;
        quickSort(0, points.length-1);   
        return Arrays.copyOfRange(points, 0, k);
    }
    public void quickSort(int l, int r) {
        if (l == r) {
            return;
        }
        int i = l-1, j = r+1;
        int[] mid = points[l+ (r-l)/2];
        while (i < j) {
            while (compare(mid, points[++i]));
            while (compare(points[--j], mid));
            if (i < j) {
                swap(i, j);
            }
        }
        if (j >= k) {
            quickSort(l, j);
        } else if (k >= j+1) {
            quickSort(j+1, r);
        }
    }
    boolean compare(int[] a, int[] b) {
        return (a[0]*a[0] + a[1]*a[1]) > (b[0]*b[0] + b[1]*b[1]);
    }
    void swap(int a, int b) {
        int[] tmp = points[a];
        points[a] = points[b];
        points[b] = tmp;
    }

Autosar开发实战:DaVinci Configurator Pro新建工程保姆级教程(附目录结构解析) 本文详细介绍了使用DaVinci Configurator Pro创建Autosar工程的完整流程,包括环境准备、工程配置、目录结构解析及常见问题排查。通过实战演示和深度解读,帮助开发者快速掌握工具使用技巧,优化工程管理,提升开发效率。特别适合需要理解Autosar开发中DaVinci Config工具链的工程师。 阅读详情

相关推荐

SpringBoot+VUE3实战:如何用WebSocket搞定网页端语音通话(避坑指南)

本文详细介绍了如何使用SpringBoot和VUE3结合WebSocket技术实现网页端语音通话功能。从环境配置、WebSocket服务端实现到前端音频处理,提供了完整的开发指南和避坑建议,帮助开发者快速构建稳定高效的实时语音通信系统。

weixin_29021195的博客 221

LeetCode973. 最接近原点的 K 个点

LeetCode973. 最接近原点的 K 个点 我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。 (这里,平面上两点之间的距离是欧几里德距离。) 你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。 示例 1: 输入:points = [[1,3],[-2,2]], K = 1 输出:[[-2,2]] 解释: (1, 3) 和原点之间的距离为 sqrt(10), (-2, 2) 和原点之间的距离为 sqrt(8), 由于 s

u011485472的博客 252

BookSim2.0 教程

本文是yz关于BookSim2.0的个人学习经验与教程。 1.介绍 什么是BookSim2.0 BookSim2.0 是周期正确的互联网络模拟器(A Cycle-Accurate Interconnection Network Simulator),被设计用来伴随William James Dally 等人出版的的书籍 Principles and Practices of INterconnection on Networks使用。 此后其功能不断得到扩展。当前的主要版本 BookSim 2.0 支持广泛

更新一些计算机体系架构NoC,GEM5, AXI4,还有machine learning 的日常 5736

LeetCode 力扣 973. 最接近原点的 K 个点 treemap acm 蓝桥杯

大家觉得写还可以,可以点赞、收藏、关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录前导知识973. 最接近原点的 K 个点示例 1:示例 2:提示:分析 前导知识 TreeMap类,链接:https://blog.youkuaiyun.com/CrazyMooo/article/details/109589132 973. 最接近原点的 K 个点 我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0

motongxue的博客 319

基于eNSP的小型企业网络设计

在本次计算机网络课程设计中,围绕“小型企业网络搭建”这一主题,成功构建了一个高效、安全且易于管理的企业内部网络。通过本次课程设计,我们不仅掌握了小型企业网络搭建的关键技术和最佳实践,还培养了团队协作和问题解决的能力。本项目所构建的网络系统不仅满足了当前的业务需求,还具备良好的可扩展性和灵活性,为企业未来的数字化转型奠定了坚实的基础。

m0_67403143的博客 1442

PMOS缓启动电路设计实战:用LTspice优化上电时序,把60A冲击降到15A

本文通过一个实战案例,深入解析了PMOS缓启动电路如何有效抑制上电冲击电流。文章指出,低ESR电容是导致冲击电流飙升的元凶,并详细阐述了利用LTspice仿真工具,通过优化栅极电阻和栅源电容等参数,将高达60A的冲击电流成功降至15A的设计与优化过程,为电源开关电路设计提供了可复用的方法论。

onion的博客 898

Python描述 LeetCode 973. 最接近原点的 K 个点

Python描述 LeetCode 973. 最接近原点的 K 个点   大家好,我叫亓官劼(qí guān jié ),在GitHub & 优快云中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在GitHub & 优快云中写博客,唯一博客更新的地址为:亓官劼的博客 ,近期将逐渐同步刷题相关记录到GitHub:Algorithmic-learning-records,大多是本人的刷题记录,如果转载请附上原文地址,谢谢。 由于学习工作的需要,算法刷题将会逐渐由C++向P

一起加油 939

Mininet 2.2.1 图形可视化界面使用注意事项

前言 关于mininet的安装,网上教程不少,大致可以参考以下这篇文章: https://blog.youkuaiyun.com/linyixiao88/article/details/65651390 安装的时候,也可以不必根据上面这篇文章这么麻烦,直接sudo apt-get install mininet,即可。 Mininet可视化 Mininet 2.2.0以上版本内置了...

裕东方的博客 4191

Leetcode 973. 最接近原点的 K 个点

973. 最接近原点的 K 个点 解题思路 很朴(fei)实(jin)的一种解法 对于每一个点,使用 pair 存储存储其在原始数组中的下标和到原点的距离 对 pair 排序,将排序前 K 位的元素对应的点存入答案容器 C++代码 class Solution { public: static bool cmp(pair<int, int>a, pair<int, int>b) { return a.second < b.second.

浪矢五金店 192

Claude Code 的 Subagent 到底怎么用?

Subagent是ClaudeCode中的专业化AI代理系统,每个代理专注单一领域(如代码审查、数据库设计),具备独立记忆空间和并行处理能力。适用于中大型项目开发,通过配置文件定义代理职责与权限,可显式调用或自动触发多代理协作。典型场景包括代码安全审查、全栈并行开发和技术方案对比。使用时需注意避免过度拆分、权限过宽等陷阱,结合链式工作流和负载均衡可显著提升效率。实测在电商项目开发中能缩短20%工期并提升40%性能。

bgeyq的博客 1992

【3D Slicer】的小白入门使用指南一

3D Slicer 是一个免费的开源软件平台,用于医学、生物医学和其他 3D 图像的可视化、处理、分割、配准和分析。Slicer 的功能包括:读/写。

图挖掘领域,新晋砖家 ☞ 未来可期,欢迎和静静一起学习交流吖 5554

leetcode-973最接近原点的K个点

leetcode-973最接近原点的K个点 题意 我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。 (这里,平面上两点之间的距离是欧几里德距离。) 你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。 示例 1: 输入:points = [[1,3],[-2,2]], K = 1 输出:[[-2,2]] 解释:...

yocichen 163

对称式目镜设计实例

对称式目镜设计实例

weixin_72050316的博客 1163

LeetCode 973. 最接近原点的 K 个点 C++代码——Leetcode刷题笔记+思路分享

LeetCode 973. 最接近原点的 K 个点 本文总结了两个方法: 方法一为本人所使用的直接排序方法,简单易实现; 方法二使用了优先队列这一数据结构,耗时更短。 方法一:排序 重写cmp()函数,使用sort()进行直接排序。 代码 class Solution { public: static bool cmp(vector<int> a, vector<int> b) { return a[0] * a[0] + a[1] * a[1]

weixin_42989041的博客 385

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

leetcode973 - 最接近原点的 K 个点(已完善,三种方式解决)

leetcode973 - 最接近原点的 K 个点(调用Arrays.sort函数与自己手写快排)介绍解题思路结果展示代码第1版第2版第3版第4版第5版 介绍 标签:堆、排序、分治算法 建议使用分治算法来解决 leetcode973 - 最接近原点的 K 个点 难度 中等 最接近原点的 K 个点 https://leetcode-cn.com/problems/k-closest-points-to-origin/ 题目: 我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0,

Alivorth的博客 553

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

「力扣」第 973 题:最接近原点的 K 个点(优先队列)

「力扣」第 973 题:最接近原点的 K 个点(优先队列) 链接:https://leetcode-cn.com/problems/k-closest-points-to-origin/ Java 代码: import java.util.Arrays; import java.util.PriorityQueue; public class Solution { public int[][] kClosest(int[][] points, int K) { int len

李威威的博客 588

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

leetcode:973. 最接近原点的 K 个点

为什么是欧几里得距离的「平方」?这是因为欧几里得距离并不一定是个整数,在进行计算和比较时可能会引进误差;但它的平方一定是个整数,这样我们就无需考虑误差了。当我们计算出每个点到原点的欧几里得距离的平方后,本题和「剑指 Offer 40. 最小的k个数」是完全一样的题。

OceanStar的博客 162

Leetcode973:最接近原点的 K 个点

文章目录题目描述思路分析代码实现 题目描述 我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。 (这里,平面上两点之间的距离是欧几里德距离。) 你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。 示例 1: 输入:points = [[1,3],[-2,2]], K = 1 输出:[[-2,2]] 解释: (1, 3) 和原点之间的距离为 sqrt(10), (-2, 2) 和原点之间的距离为 sqrt(8), 由于 sqrt(8) &

sparky的博客 551

Leetcode 973.最接近原点的 K 个点(K Closest Points to Origin)

Leetcode 973.最接近原点的 K 个点 1 题目描述(Leetcode题目链接)   我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。(这里,平面上两点之间的距离是欧几里德距离。)   你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。 输入:points = [[1,3],[-2,2]], K = 1 输出:[[-2...

qq_39378221的博客 253

LeetCode第973题 - 最接近原点的 K 个点

LeetCode第973题 - 最接近原点的 K 个点

流水账 339

【LeetCode每日一题】[中等]973. 最接近原点的 K 个点

【LeetCode每日一题】[中等]973. 最接近原点的 K 个点 973. 最接近原点的 K 个点 973. 最接近原点的 K 个点 算法思想:数组,排序 题目: java代码 class Solution { public int[][] kClosest(int[][] points, int K) { //利用Arrays.sort排序,然后直接返回前k个值,效率不高,重在排序方法 Arrays.sort(points, new Comparator&lt

qq_39457586的博客 399

LeetCode.973. 最接近原点的 K 个点

最接近原点的 K 个点 我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。 (这里,平面上两点之间的距离是欧几里德距离。) 你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。 示例 1: 输入:points = [[1,3],[-2,2]], K = 1 输出:[[-2,2]] 解释: (1, 3) 和原点之间的距离为 ...

码农在途的博客 801

LeetCode 973. 最接近原点的 K 个点 JAVA

我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。 (这里,平面上两点之间的距离是欧几里德距离。) 你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。 示例 1: 输入:points = [[1,3],[-2,2]], K = 1 输出:[[-2,2]] 解释: (1, 3) 和原点之间的距离为 sqrt(10), (-2, 2) 和原点之间的距离为 sqrt(8), 由于 sqrt(8) < sqrt(10),(-2, 2) 离

sinb妃的博客 226

LeetCode 973. 最接近原点的 K 个点

目录结构 1.题目 2.题解 1.题目 我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。 (这里,平面上两点之间的距离是欧几里德距离。) 你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。 示例: 输入:points = [[1,3],[-2,2]], K = 1 输出:[[-2,2]] 解释: (1, 3) 和原点之间的距离为 sqrt(10), (-2, 2) 和原点之间的距离为 sqrt(8), 由于 sqrt(

HarvestWu的博客 236

LeetCode第973题最接近原点的 K 个点

973. 最接近原点的 K 个点 题目: 我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。 (这里,平面上两点之间的距离是欧几里德距离。) 你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。 示例 1: 输入:points = [[1,3],[-2,2]], K = 1 输出:[[-2,2]] 解释: (1, 3) 和原点之间的距离为 sqrt(10), (-2, 2) 和原点之间的距离为 sqrt(8), 由于 sqrt(8) <

qq_41967623的博客 421

LeetCode 每日一题973:最接近原点的 K 个点

973.最接近原点的 K 个点 我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。 (这里,平面上两点之间的距离是欧几里德距离。) 你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。 示例 1: 输入:points = [[1,3],[-2,2]], K = 1 输出:[[-2,2]] 解释: (1, 3) 和原点之间的距离为 sqrt(10), (-2, 2) 和原点之间的距离为 sqrt(8), 由于 sqrt(8) < sqr

雷震子的博客 497
上一篇: Leetcode 73 矩阵置零
下一篇: LeetCode 264 丑数II
耐利
博客等级 码龄12年 188粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值