🗒️2106. 摘水果
2025-4-10
| 2025-4-10
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
创建时间
Apr 10, 2025 01:09 AM
在一个无限的 x 坐标轴上,有许多水果分布在其中某些位置。给你一个二维整数数组 fruits ,其中 fruits[i] = [positioni, amounti] 表示共有 amounti 个水果放置在 positioni 上。fruits 已经按 positioni 升序排列 ,每个 positioni 互不相同 。
另给你两个整数 startPos 和 k 。最初,你位于 startPos 。从任何位置,你可以选择 向左或者向右 走。在 x 轴上每移动 一个单位 ,就记作 一步 。你总共可以走 最多 k 步。你每达到一个位置,都会摘掉全部的水果,水果也将从该位置消失(不会再生)。
返回你可以摘到水果的 最大总数 。

不定长滑动窗口

基本思路:不定长滑动的关键是找到左窗口移动的判断条件。
在解这道题的时候,我的想法基本和题解差不多。先找到最左边的位置,右窗口从中间开始移动。但是一直想不到左窗口移动的思路。我是只考虑从左往右的遍历这一种情况。
看了题解,恍然大悟,要考虑两种情况,从左到右和从右到左。而且我的算法太原始,是一点一点移动窗口,导致两个窗口混着一起,分不清楚。而题解是通过推导等式直接得到的。
如果先向右再向左,那么移动距离为
(fruits[right][0]−startPos)+(fruits[right][0]−fruits[left][0])>k => fruits[right][0] * 2 - fruits[left][0] - startPos > k
如果先向左再向右,那么移动距离为
(startPos−fruits[left][0])+(fruits[right][0]−fruits[left][0])>k => fruits[right][0] - fruits[left][0] * 2 + startPos > k

📎 参考

 
  • 【题单】滑动窗口与双指针
  • 2555. 两个线段获得的最多奖品2271. 毯子覆盖的最多白色砖块数
    Loading...