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

找到K个最接近的元素(LeetCode)

题目

给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。

整数 a 比整数 b 更接近 x 需要满足:

  • |a - x| < |b - x| 或者
  • |a - x| == |b - x| 且 a < b

解题

"""
时间复杂度为 O(log(n-k) + k),其中 n 是数组的长度。二分查找部分的时间复杂度为 O(log(n-k)),而结果提取部分的时间复杂度为 O(k)
"""from typing import Listdef findClosestElements(arr, k, x):# 二分查找,找到最接近 x 的元素的位置left, right = 0, len(arr) - k# 使用二分查找来确定最左边的边界while left < right:mid = (left + right) // 2# 比较 x 与 arr[mid] 和 arr[mid + k] 的距离if x - arr[mid] > arr[mid + k] - x:left = mid + 1else:right = mid# 从找到的 left 位置开始的 k 个元素即为结果return arr[left:left + k]# 示例输入
arr = [1, 2, 3, 4, 5]
k = 4
x = 3
result = findClosestElements(arr, k, x)
print(result)  # 输出: [1, 2, 3, 4]

http://www.mrgr.cn/news/13222.html

相关文章:

  • 自动化分支合并:一键切换到Master并完成合并操作的脚本
  • C++——STL——栈(stack)
  • Go语言开发通过本地数据xdb文件​查询获取IP地址的归属地区及运营商名称
  • CSS中的Flexbox布局和Grid布局有什么区别?适用场景
  • WPF—画刷(使用画刷实现背景颜色渐变效果)
  • C语言—字符函数和字符串函数
  • 基于SpringBoot+Vue+MySQL的小区物业管理系统
  • YarnClient发送和接收请求源码解析
  • 如何使用ssm实现基于SSM的在线教育网站的设计与实现+vue
  • 基于SSM+小程序的垃圾分类管理系统(垃圾2)(源码+sql脚本+视频导入教程+文档)
  • Java:Calendar类
  • 【区块链 + 司法存证】区块链电子数据存证平台 | FISCO BCOS应用案例
  • 【NO.11】LeetCode经典150题-274. H 指数
  • C++/Qt 多媒体(续二)
  • C++_CH09_循环
  • 免杀笔记 ---> CS特性角度看Veh免杀
  • Ubuntu美化为类Windows风格
  • DataWhale AI夏令营-《李宏毅深度学习教程》笔记-task2
  • Qt:玩转QPainter序列三
  • 内存管理篇-14kmalloc机制实现分析