【LeetCode - 658】找到 K 个最接近的元素

2023-11-10

1、题目描述

在这里插入图片描述

2、解题思路

  题目给定的函数返回的是 List 类型,List 有一个方法和字符串类似,为 subList(a,b),返回 list 区间 [a,b) 的子序列。

  先把给定的 arr 数组转成 List 类型 ret。

  1、如果 x 比 ret 的第一个元素还小,则返回 ret 的前面 k 个元素;

  2、如果 x 比 ret 的最后一个元素还大,则返回 ret 最后 k 个元素;

  3、如果 x 不满足上面两个,则:

  3.1 调用 Collections 的 binarySearch 方法,返回一个 index,如果 x 存在于 ret 中,则返回 x 在 ret 中的下标;如果 x 不存在于 ret 中,则返回的 index 表示“如果 x 要插入到 ret 中,则应该插入在 -index-1 的位置中”;

  3.2 确定一个区间 [index-k-1, index+k-1] 作为初始区间,不断比较 x 到左边界和右边界的距离大小,谁大则谁往中间缩小边界;

  3.3 当边界内的元素为 k 个时,则该 k 个元素就是答案。

3、解题代码

import java.util.*;

class Solution {
    public List<Integer> findClosestElements(int[] arr, int k, int x) {
        List<Integer> ret = Arrays.stream(arr).boxed().collect(Collectors.toList());
        int n = ret.size();
        if (x <= ret.get(0)) {
            return ret.subList(0, k);
        } else if (ret.get(n - 1) <= x) {
            return ret.subList(n - k, n);
        } else {
            int index = Collections.binarySearch(ret, x);
            if (index < 0){
                index = -index - 1;
            }
            int low = Math.max(0, index - k - 1);
            int high = Math.min(ret.size() - 1, index + k - 1);
            while (high - low > k - 1) {
                if ((x - ret.get(low)) <= (ret.get(high) - x)){
                    high--;
                }else{
                    low++;
                }
            }
            return ret.subList(low, high + 1);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【LeetCode - 658】找到 K 个最接近的元素 的相关文章

  • 在多个不同线程之间共享变量

    我想在多个线程之间共享一个变量 如下所示 boolean flag true T1 main new T1 T2 help new T2 main start help start 我想分享flag在主线程和帮助线程之间 这是我创建的两个不
  • Java 中的 sscanf 等效项[重复]

    这个问题在这里已经有答案了 可能的重复 用于使用已知模式解析字符串中的值的 sscanf 的 Java 等效项是什么 https stackoverflow com questions 8430022 what is the java eq
  • 为什么需要使用java.util.TimerTask的purge()?

    Timer cancel 取消任务 Timer purge 从此计时器的任务队列中删除所有已取消的任务 如果我不在这里使用 purge 会发生什么 当计时器的任务队列已满时会发生什么 除非您正在运行的计时器数量过多 否则实际计时器行为不会发
  • 无法解析导航抽屉中片段中的 getSystemService

    我正在尝试实现一个导航抽屉 其中有一个片段中的地图 这是我的代码 这里是fragment map xml
  • Android 在 ROOM 数据库中插入大量数据

    我有大约 10 个模型 每个模型都有超过 120K 行和 90 列的记录 其中包含双数组值 在 Room 中插入任何模型都需要超过 125 130 秒 任何人都可以建议我需要做什么才能使用一些批量插入技术来保存所有这些 120K 该技术大约
  • getAnnotations() 为空

    我想在我的应用程序中使用注释 因此 我为注释创建了 hello world 如下示例 public class HelloAnnotation Foo bar Hello World public String str public sta
  • 使用 Morphia 配置 Spring Boot?

    我不想利用 Spring DATA MongoDB 支持 我想利用名为 Morphia 的 MongoDB ORM https github com mongodb morphia https github com mongodb morp
  • Java RMI 通过互联网

    我正在用 Java 开发一个游戏 使用 RMI 进行所有网络通信 RMI 允许我调用服务器上的方法 但这对我来说还不够 我还希望服务器能够在连接的客户端之间传播消息 我的客户端查找服务器 它的接口扩展了远程 并在其上注册 它允许服务器知道谁
  • 当派生类中重写该方法时,如何使用派生类 Object 调用基类方法?

    class A public void m1 System out println hi base class class B extends A public void m1 System out println hi derived p
  • 非法监控状态异常

    如何将轮询线程传递给另一个线程进行处理 程序执行在控制器类中 该类具有 main 方法和线程池 主类控制器 public static void main String args throws InterruptedException Ru
  • Postgres UUID 和休眠

    我有一个具有 UUID 列的实体 它不是主键 我正在使用 Postgres 和 hibernate 我对此专栏的类型是https www postgresql org docs 9 1 static datatype uuid html h
  • Java 中的逻辑回归

    我们需要用 Java 进行逻辑回归 我们在 Python 中使用了这段代码http blog smellthedata com 2009 06 python logistic regression with l2 html http blo
  • Spring Boot,使用 EhCache 进行缓存

    我需要在我的应用程序中缓存一些数据 我正在考虑使用 Ehcache 我有几个问题 Ehcache需要另外一台服务器吗 我需要其他客户端来使用 Ehcache 吗 Ehcache 如何与多个实例配合使用 是否有可能使用 Ehcache 创建类
  • 如何为我的数独游戏制作 GUI? (摇摆)

    到目前为止 我已经编写了生成随机 9x9 数独网格的代码 我是Java的初学者 所以我有一些关于如何做UI的问题 显示数字的最佳方式是什么 我尝试创建 81 个 JTextFields 这非常乏味 而且我确信有一种有效的方法可以做到这一点
  • 如何告诉杰克逊在反序列化期间忽略空对象?

    在反序列化过程中 据我理解是将JSON数据转换为Java对象的过程 我如何告诉Jackson 当它读取不包含数据的对象时 应该忽略它 我正在使用 Jackson 2 6 6 和 Spring 4 2 6 我的控制器收到的JSON数据如下 i
  • 如何将捕获的图像写入/粘贴到文档文件?

    我有一个场景 我需要捕获图像并将它们一个接一个地写入到一个word文件中 我已经编写了下面的代码 但似乎不起作用 请帮忙 Robot robot try robot new Robot BufferedImage screenShot ro
  • 如何获取嵌套类型内部结构的所有类型?

    我有一个函数如下 public void park List
  • 更改 Logger 实例的全局设置

    我在用着java util logging Logger http download oracle com javase 1 4 2 docs api java util logging Logger html作为我的应用程序的日志引擎 每
  • 如何使用 itext 在 pdf 页脚上添加页码,它应该照顾其宽度?

    我的代码示例如下 Override public void onEndPage PdfWriter writer Document document addFooter writer private void addFooter PdfWr
  • hibernate通过主键查询

    我想通过主键创建查询 假设我有类主键 PersonKey 属性是 name 和 id 我有 Person 类 属性是 PersonKey 地址 DOB 现在 我想通过主键搜索人员 首先 我创建 PersonKey 的实例 并将名称设置为 j

随机推荐

  • line-height(行高)

    line height 行高 line height 行高 介绍 字体框 line height 行高 介绍 1 行高指的是文字占有的实际高度 2 通过line height来设置行高 3 行高可以直接指定一个大小 px em 4 也可以直
  • Unity WebGL三维地球

    1 支持arcgis 天地图 bingmap 谷歌地图 高德地图等影像加载 2 支持高程三维地形加载 3 支持在线 离线数据加载 4 支持unity坐标和经纬度坐标互相转换 5 支持fbx模型放置在地球上 6 支持倾斜摄影数据放置在地球上
  • C#从数据库中读取二进制流并生成文件

    下面以图片文件为例加以说明 从数据库表 图片存储 中读取ID为1的图片数据并生成图片文件 MySqlConnection conn new MySqlConnection Server localhost Database test cha
  • fff

    http www migucloud com vi0 109 3j KJ59CLFb6F9pvcJ1egcF cld450p FILENAME 54 cld450p mp4 duration 201 owner 109 path 109 3
  • linux 杀死进程失败,linux - Ubuntu关闭失败“ *杀死所有剩余进程…” - Ubuntu问答...

    问题描述 我已经重新安装了Ubuntu Server reboot 有效 但是在 Killing all remaining processes 步骤上关闭失败 我在用 sudo shutdown now 在失败之后 由 fail 指示 f
  • 【廖雪峰python入门笔记】函数

    1 函数 我们知道圆的面积计算公式为 S r 当我们知道半径r的值时 就可以根据公式计算出面积 假设我们需要计算3个不同大小的圆的面积 r1 12 34 r2 9 08 r3 73 1 s1 3 14 r1 r1 s2 3 14 r2 r2
  • 深入学习java源码之ArrayList.iterator()与ArrayList.listIterator()

    深入学习java源码之ArrayList iterator 与ArrayList listIterator 内部类的使用典型的情况是 内部类继承自某个类或实现某个接口 内部类的代码操作创建其的外层类的对象 所以你可以认为内部类提供了某种进入
  • php excel导入

    excel导入导出是我们做项目中经常用到的功能 那么 今天就来说说excel导入 一 类文件 二 调用代码
  • 使用 htmx 构建交互式 Web 应用

    学习目标 了解htmx的基本概念 特点和用法 并能够运用htmx来创建交互式的Web应用程序 学习内容 1 什么是htmx htmx是一种用于构建交互式Web应用程序的JavaScript库 它通过将HTML扩展为一种声明性的交互式语言 使
  • 深入webpack打包原理,loader和plugin的实现

    本文讨论的核心内容如下 webpack进行打包的基本原理 如何自己实现一个loader和plugin 注 本文使用的webpack版本是v4 43 0 webpack cli版本是v3 3 11 node版本是v12 14 1 npm版本v
  • uboot启动流程图以及boot启动linux流程图

    运行厂商u boot的前提 运行u boot 需要DDR或者DRAM 串口 SD卡驱动 EMMC NAND 这些要和厂商的开发板一致 就能直接在自己板子上运行u boot 开机流程 当把u boot bin下载到SD卡上时 由于整个u bo
  • Web Scraping指南: 使用Selenium和BeautifulSoup

    在当今信息时代 数据是无处不在的宝贵资源 对于许多企业 研究人员以及开发者来说 从互联网上获取准确且有价值的数据变得越来越重要 而Web scraping 网络爬虫 技术则成为了实现这一目标的关键工具 本篇文章将向您介绍一个高级Web Sc
  • 学习Linux第六天

    linux中命令的匹配顺序 1 别名 gt 2 命令缓存 gt 3 通过相提并论中所定义的命令文件路径开始匹配 alias 命令别名 alias 别名 命令本身 alias cc touch root www tm tm不是别名命令 通过
  • 明星漫画

    明星漫画 转载于 https www cnblogs com Dicky archive 2005 02 24 122393 html
  • 《C++编程规范:101条规则、准则与最佳实践》——1.5做代码审查

    本节书摘来自异步社区出版社 C 编程规范 101条规则 准则与最佳实践 一书中的第1章 第1 5节 作者 加 Herb Sutter 罗 Andrei 更多章节内容可以访问云栖社区 异步社区 公众号查看 1 5做代码审查 摘要审查代码 更多
  • 数组sort方法的使用

    sort 方法是数组自带的一种排序方法 数组在原数组上进行排序 不生成副本 如果调用该方法时没有使用参数 将按字母顺序对数组中的元素进行排序 说得更精确点 是按照字符编码的顺序进行排序 要实现这一点 首先应把数组的元素都转换成字符串 如有必
  • Spring_day01

    Spring day01 一 spring入门 1 什么是框架 源自于建筑学 隶属土木工程 后发展到软件工程领域 软件工程框架 经过验证的 具有一定功能的 半成品软件 经过验证 具有一定功能 半成品 2 框架的作用 3 spring是一个轻
  • C51单片机实验——LCD 1602液晶显示器

    实验名称 利用1602实现数字时钟 实验环境 普中实验系统 Keil Vision 4软件 实验目的 1 掌握1602液晶显示器的工作原理和接口方法 2 利用本课程前面所学的知识 实现数字时钟功能 硬件连线 LCD1602的RS R W 和
  • Arduino core for ESP8266 安装失败问题处理方法

    文章目录 目的 离线开发板数据包 鱼 安装最新开发板数据包 渔 总结 目的 理论上Arduino IDE安装开发板数据包是非常方便的 不过在国内的网络环境下有时候就会很纠结 另外Arduino IDE对于下载数据这块也存在问题 经常下着下着
  • 【LeetCode - 658】找到 K 个最接近的元素

    文章目录 1 题目描述 2 解题思路 3 解题代码 1 题目描述 2 解题思路 题目给定的函数返回的是 List 类型 List 有一个方法和字符串类似 为 subList a b 返回 list 区间 a b 的子序列 先把给定的 arr