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

D.二分查找-二分答案-求最大——2576. 求出最多标记下标

题目链接:2576. 求出最多标记下标(中等)

算法原理:

解法一:排序+双指针+贪心

33ms击败79.27%

时间复杂度O(Nlogn)

首先我们思考一件事情:当一个大的数遇到一堆小的数时,在同样满足2×小的数≤大的数的情况下,咱们选这些小的数中偏小的还是偏大的?那肯定选偏大的啊!因为偏小的可能还能与后续大的数再凑一对,这贪心的思想就来了

①我们要找大的数和小的数就要先排序

②从中间劈开,分别找满足题述条件的2*nums[i] <= nums[j]的数

如果当前的大数能跟前面小的数匹配上,ret+=2,left和right同时往后走

如果匹配不上,说明当前大数小了,要right往后走再继续匹配

解法二:二分查找

35ms击败43.90%

时间复杂度O(Nlogn)

①目标变量:对数

②目标条件:对数最多

③转换逻辑:在mid对的情况下能否满足2 * nums[i] <= nums[j]的条件

具体步骤:

①确定边界:

left:0,最少0对

right:n/2,n为数组长度,最多时,所有数都能组成一对

②确定二分模型:

由于要找最大对数,因此采用最右端点模型,如果没有mid对,说明mid太大了,属于最右端点的右边,需要返回true,缩小mid,向左调整

③check方法设计:判断方法跟解法一类似,都是贪心的思想,但不完全相同,如果数组长度为10,我们在找3对时,只需判断3个最大元素和3个最小元素能否配对即可,如果这都没有3对,那就更不可能再凑3对了

Java代码:

class Solution { //解法一:排序+双指针+贪心 public int maxNumOfMarkedIndices(int[] nums) { Arrays.sort(nums); int n=nums.length; int left=0,right=(n+1)/2; int ret=0; while(left<n/2&&right<n){ if(2*nums[left]<=nums[right]){ ret+=2; left++;right++; }else right++; } return ret; } }
class Solution { //解法二:二分查找 public int maxNumOfMarkedIndices(int[] nums) { Arrays.sort(nums); int n=nums.length; int left=0,right=n/2; int ret=0; while(left<right){ int mid=left+(right-left+1)/2; if(check(mid,nums)) right=mid-1; else left=mid; } return left*2; } //如果不能找到mid对则说明mid太大了,返回true,需要向左调整 private boolean check(int mid,int[] nums){ //0对一定可行,无需向更小调整 if(mid==0) return false; int n=nums.length; //贪心验证:前mid个最小元素配对最后mid个最大元素 for(int i=0;i<mid;i++) //有一个不满足,mid对就达不到 if(2*nums[i]>nums[n-mid+i]) return true; return false; } }
http://www.jsqmd.com/news/353246/

相关文章:

  • Docker容器启动慢如蜗牛?揭秘CPU绑定、内存预分配与IO调度的5大工业级加速方案
  • 国产操作系统+Docker组合部署踩坑大全,华为欧拉、统信UOS双平台避坑清单
  • 计算机网络专科毕业设计:从零实现一个轻量级HTTP代理服务器(含并发与安全考量)
  • ChatGPT Atlas浏览器下载与AI辅助开发实战:从原理到生产环境部署
  • Cesium贴模型播放视频:性能优化与实战避坑指南
  • Python DeepSeek 智能客服实战:从零构建 AI 辅助开发框架
  • ComfyUI视频模型入门指南:从零搭建到实战避坑
  • Docker多架构镜像构建避坑清单:5个99%工程师踩过的坑,第3个导致CI/CD全线崩溃?
  • Docker边缘容器化部署全链路解析(K3s+EdgeX+OTA热更新深度拆解)
  • ChatTTS 语音合成实战:如何正确处理多音字与停顿问题
  • GP8101 PWM转0-5V/10V模拟电压模块原理图设计,已量产
  • 多模态智能客服回复系统实战:从架构设计到避坑指南
  • Kubernetes节点Pod间延迟突增?先别动CNI——90%问题源于Docker daemon.json这3行配置!
  • ChatGPT文献检索实战指南:从零构建高效学术研究工具
  • 边缘AI推理卡顿、镜像拉取失败、节点失联?Docker边缘运维十大高频故障,90%工程师第3个就中招!
  • 从零构建ARM64 Linux内核:QEMU虚拟化环境搭建与调试实战
  • 智能客服接入小程序的AI辅助开发实战:从架构设计到性能优化
  • 从零开始:STM32G474 FDCAN过滤器配置实战指南
  • 容器内存OOM Killer频繁触发?深度解析RSS/VSS/WorkingSet差异,附2024最新oom_score_adj调优矩阵
  • 智能客服Agent开发实战:基于AI辅助的架构设计与性能优化
  • 化妆品商城毕业设计效率提升实战:从单体架构到模块化解耦
  • 从零开始复现一篇6.2分CHARLS纵向研究:烹饪燃料与呼吸健康的关联分析
  • 容器化部署效率提升300%?揭秘头部科技公司正在封测的Docker低代码配置新范式
  • 如何设计高效的ChatGPT提示词:课题与实验设计的最佳实践
  • Docker + Llama 3 + Ollama 一键部署实战:手把手配置可生产级AI本地推理环境(含GPU加速验证清单)
  • Docker AI 配置失效全溯源(内存溢出/模型加载失败/端口冲突三重危机深度拆解)
  • AI智能客服系统架构设计与核心实现:从对话管理到意图识别
  • 金融Docker配置“黑盒”曝光:3家头部券商未公开的seccomp-bpf策略模板(含实时风控模块隔离实录)
  • AI 辅助开发实战:基于图神经网络的链路预测毕设项目从零构建指南
  • 闲鱼智能客服机器人架构演进:如何实现高效对话与智能分流