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