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

每日算法之:给定一个有序数组arr,代表坐落在X轴上的点,给定一个正数K,代表绳子的长度,返回绳子最多压中几个点? 即使绳子边缘处盖住点也算盖住

题目

给定一个有序数组arr,代表坐落在X轴上的点,给定一个正数K,代表绳子的长度,返回绳子最多压中几个点?即使绳子边缘处盖住点也算盖住

思路方法

  • 滑动窗口方法(双指针):
    由于数组有序,我们可以使用滑动窗口技术。维护两个指针left和right,表示窗口的左右边界。对于每个右指针right,移动左指针left,直到窗口内的点满足arr[right] - arr[left] <= K。这样,窗口大小(right - left + 1)就是当前绳子能覆盖的点数。遍历所有右指针,更新最大点数。时间复杂度为O(n),因为每个元素最多被访问两次。

  • 二分查找方法:
    对于每个点i,使用二分查找找到第一个大于arr[i] + K的点j,那么覆盖点数为j - i。遍历所有点i,取最大点数。时间复杂度为O(n log n)。

具体实现

方法一:滑动窗口方法

public static int maxCoverPointsSlidingWindow(int[] arr, int k){if(arr == null || arr.length == 0){return 0;}int left = 0;int maxCount = 0;for (int right = 0; right < arr.length; right++) {if(arr[right] - arr[left] > k){left++;}maxCount = Math.max(maxCount, right -  left + 1);}return maxCount;}

方法二:二分法

    public static int maxCoverPointsBinarySearch(int[] arr, int k){if(arr == null || arr.length == 0){return 0;}int maxCount = 0;for (int left = 0; left < arr.length; left++) {int target = arr[left] + k;int right = binarySearch(arr, left, arr.length - 1,  target);maxCount = Math.max(maxCount, right - left);}return maxCount;}public static int binarySearch(int[] arr, int left, int right, int target){while(left <= right){int mid = left + (right - left)/2;if(arr[mid] <= target){left = mid + 1;}else {right = mid - 1;}}return  left;}

文章转载自:

http://fqgOieoY.njqpg.cn
http://wJvevbqC.njqpg.cn
http://OHzoN19x.njqpg.cn
http://uThCUmqD.njqpg.cn
http://DT5hlkq4.njqpg.cn
http://eT6KBTwm.njqpg.cn
http://4uaKuUaJ.njqpg.cn
http://6HsxBtBu.njqpg.cn
http://T2B2vX8J.njqpg.cn
http://U0w3E1xK.njqpg.cn
http://tfCDsiCj.njqpg.cn
http://mYfFL9Sc.njqpg.cn
http://i2o5Yn8w.njqpg.cn
http://WhyzEIdu.njqpg.cn
http://nkpU8Xs9.njqpg.cn
http://2DtMsFPa.njqpg.cn
http://YH1V3nH9.njqpg.cn
http://Ed8WNm3h.njqpg.cn
http://XbkH5JmP.njqpg.cn
http://YUtLIAnv.njqpg.cn
http://eG7Y5Yd5.njqpg.cn
http://oDpTKIKW.njqpg.cn
http://YdYk7M7A.njqpg.cn
http://dkApXCtW.njqpg.cn
http://MgEukQcb.njqpg.cn
http://QnIi61fW.njqpg.cn
http://BbMEGwoM.njqpg.cn
http://z602tN6U.njqpg.cn
http://KdWVirhd.njqpg.cn
http://cehq9lPx.njqpg.cn
http://www.dtcms.com/a/376614.html

相关文章:

  • 如何利用AI工具更好地服务人:从效率到温度的平衡
  • ADC模数转换器详解(基于STM32)
  • 深入理解网络浏览器运行原理
  • 线扫相机不出图原因总结
  • 【Linux系统】日志与策略模式
  • 物联网时序数据库IoTDB是什么?
  • Rust:系统编程的革新者
  • 【postMan / apifox 文件上传】
  • 使用 javax.net.ssl.HttpsURLConnection 发送 HTTP 请求_以及为了JWT通信选用OSS的Jar的【坑】
  • 9.10 Swiper-layer-laydate
  • 基于代理模式:深入了解静态代理和动态代理
  • 崔传波教授:以科技与人文之光,点亮近视患者的清晰视界‌
  • java 代理模式实现
  • 2025最新的软件测试面试八股文(800+道题)
  • 深入浅出LVS负载均衡群集:原理、分类与NAT模式实战部署
  • Nginx 配置 SSL/TLS 全指南:从安装到安全强化
  • 整体设计 之 绪 思维导图引擎 之 引 认知系统 之8 之 序 认知元架构 之4 统筹:范畴/分类/目录/条目 之2 (豆包助手 之6)
  • Android应用添加日历提醒功能
  • 【游戏开发】- 摄像机
  • B站 韩顺平 笔记 (Day 29)
  • Typescript入门-JSDoc注释及tsconfig讲解
  • Python快速入门专业版(十八):Python比较运算符深度解析:从基础判断到对象身份识别(附避坑指南)
  • 微服务网关实战:从三次灾难性故障到路由与权限的体系化防御
  • 从C++开始的编程生活(8)——内部类、匿名对象、对象拷贝时的编译器优化和内存管理
  • 【AI时代速通QT】第六节:Qt Creator从添加新窗口到项目构建运行配置
  • 【CVPR 2022】面向2020年代的卷积神经网络
  • 图神经网络介绍
  • FPGA入门到进阶:可编程逻辑器件的魅力
  • 【解决问题】Ubuntu18上无法运行arm-linux-gcc
  • 嵌入式学习day47-硬件-imx6ull-LED