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

记力扣2106.摘水果 练习理解

在一个无限的 x 坐标轴上,有许多水果分布在其中某些位置。给你一个二维整数数组 fruits ,其中 fruits[i] = [positioni, amounti] 表示共有 amounti 个水果放置在 positioni 上。fruits 已经按 positioni 升序排列 ,每个 positioni 互不相同 。

另给你两个整数 startPos 和 k 。最初,你位于 startPos 。从任何位置,你可以选择 向左或者向右 走。在 x 轴上每移动 一个单位 ,就记作 一步 。你总共可以走 最多 k 步。你每达到一个位置,都会摘掉全部的水果,水果也将从该位置消失(不会再生)。

返回你可以摘到水果的 最大总数 。

思路:

  1. 首先使用二分查找 (bisect_left) 找到第一个位置不小于startPos - k的水果,这是我们可能需要考虑的左边界起点。

  2. 然后遍历从这个左边界开始的所有水果:

    • 如果水果位置超出startPos + k,直接跳出循环,因为这些水果不可能被收集到
    • 累加当前水果的数量到总和s
    • 使用一个 while 循环来调整左边界,确保当前窗口内的水果都能在k步内收集到
    • 更新最大水果数量ans
  3. 最后返回最大水果数量ans

这个算法的核心是维护一个滑动窗口,窗口内的水果都能在k步内从startPos到达。其中判断条件i*2-startPos-fruits[left][0]>k and i+startPos-fruits[left][0]*2>k是为了确保无论是先向左再向右,还是先向右再向左,都能在k步内覆盖整个窗口范围

class Solution:def maxTotalFruits(self,fruits:List[int],startPos:int,k:int)->int:left=bisect_left(fruits,[startPos-k])ans=s=0for i ,char in fruits[left:]:if i>startPos+k:breaks+=charwhile i*2-startPos-fruits[left][0]>k and i+startPos-fruits[left][0]*2>k:s-=fruits[left][1]left +=1ans=max(ans,s)return ans

难点:

1.想到利用二分查找去找到第一个出现刚好不低于startPos-k的索引作为左端。

2. 通过判断(如果是先右后左:他的步数为i-startPos+i-fruits[left][0];;如果是先左后右:startPos-fruits[left][0]+i-fruits[left][0])步长是否超过k为依据,如果超过了移动左边界更新最大值来计算

http://www.dtcms.com/a/460781.html

相关文章:

  • Java中的泛型 Generics
  • [linux仓库]信号产生[进程信号·贰]
  • 网站内部链接优化网红营销李佳琦案例分析
  • 有哪些网站设计比较好的公司wordpress右上角登录
  • 在Python中加载.pkl文件
  • HarmonyOS大厂面试总结大全二
  • python 字符串压缩(字符串-中等)含源码(九)
  • 如何自己设计一个网页宁波seo推广哪家好
  • 【STM32项目开源】STM32单片机智能温室大棚控制系统
  • 车牌 OCR 识别:国庆高速免费通行的 “隐形引擎”
  • wpf之TabControl
  • WPF应用最小化到系统托盘
  • 使用平行型子环腔的 23 KHz 线宽 1064 nm SOA 光纤激光器
  • 保定企业建站程序wordpress数据都被存在哪
  • 深圳做网站做app少儿戏曲知识 网站建设
  • SymPy 符号计算:从基础到高级的完整指南
  • 成免费crm推广网站黄石网站建设黄石
  • HTB Monitored writeup(nagios api v1 login)
  • 开源 C++ QT QML 开发(十三)多线程
  • 企业如何建设网站,企业搭建网站的流程
  • HarmonyOS SaveButton深度解析:安全便捷的媒体资源保存方案
  • 如何用开源外卖系统源码打造私域O2O生态?技术+运营双轮驱动
  • {title:敏捷开发实战如何利用Scrum框架在30天内交付高质量软件}
  • 浏览器端音视频处理新选择:Mediabunny 让 Web 媒体开发飞起来
  • iOS 26 能耗监测全景,Adaptive Power、新电池视图
  • 微软警告:攻击者将Microsoft Teams武器化用于勒索软件、间谍活动及社会工程攻击
  • QT MVC中View的特点及使用注意事项
  • WAF防护的性能优化策略
  • MyBatis-Spring集成完全指南
  • 如何知道自己的台式电脑的所有硬件信息