首页 > 其他分享 >2106. 摘水果

2106. 摘水果

时间:2023-05-04 21:34:23浏览次数:53  
标签:右移 水果 right int fruits startPos 2106 left

题目链接:2106. 摘水果

方法:滑动窗口

解题思路

  • 从 \(startPos\) 所能到达的最左端 \((>= startPos - k)\) 的位置 \(left\) 开始,初始化右指针 \(right = left\),\(right\) 右移至 \(startPos\),因为不知道继续右移能不能到达;
  • 当右移超过 \(startPos\) 时,可能有两种情况:
    • \(startPos -> left -> startPos -> right\);
    • \(startPos -> right -> startPos -> left\);
    • 此时要判断在 \(k\) 步内能不能到达,如果不能应该将左指针右移直到可以在 \(k\) 步内到达的位置;
  • 每一次右移结束,取当前最大值。

代码

class Solution {
public:
    int maxTotalFruits(vector<vector<int>>& fruits, int startPos, int k) {
        int left = lower_bound(fruits.begin(), fruits.end(), startPos - k, [](const auto &a, const int b) { return a[0] < b; }) - fruits.begin();
        int right = left, s = 0, n = fruits.size();
        for ( ; right < n && fruits[right][0] <= startPos; right ++ ) {
            s += fruits[right][1];
        }
        int ans = s;
        for ( ; right < n && fruits[right][0] <= startPos + k; right ++ ) {
            s += fruits[right][1];
            while (fruits[right][0] - fruits[left][0] * 2 + startPos > k  && 
                   fruits[right][0] * 2 - fruits[left][0] - startPos > k) {
                s -= fruits[left ++ ][1];
            }
            ans = max(ans, s);
        }
        return ans;
    }
};

复杂度分析

时间复杂度:\(O(n)\);
空间复杂度:\(O(1)\)。

标签:右移,水果,right,int,fruits,startPos,2106,left
From: https://www.cnblogs.com/lxycoding/p/17372576.html

相关文章

  • python爬虫——嘉兴水果指数获取
    1.抓包参数分析 我们可以看出,stageId参数随着时间的变化而变化,pageNo随着页数的增加+1,其他参数不变2.代码部分importrequestsimportredeforderBy_get():url='http://jxzgsgzs.com/js/price.js?v=1.7.2'header={'User-Agent':......
  • 2023年最新FL21水果音乐制作软件FL Studio 21中文版强悍来袭
    FLStudio21是一款无可挑剔并且适用于多种领域的音频编辑软件。这款软件支持多声道混音器和VST插件,包括上百种乐器和效果插件,还为大家提供了一个音符编辑器,可以根据作曲家的要求编辑不同乐器的节奏,如鼓、钹、锣、钢琴、筝、扬琴等的节奏。内置许多电子合成音色,只有斯泰鲁能让人兴......
  • 水果店销售
    #假设你是一家水果店的老板,你想要统计每种水果的销售情况。你可以使用Python的字典来记录每种水果的销售数量和总销售额。以下是一个简单的程序:#创建一个空字典来存储水果销售情况fruit_sales={}#添加销售记录fruit_sales['苹果']={'数量':100,'总销售额':500}fruit_sa......
  • 78、扣水果—钢笔工具
    1、用钢笔工具把桃子抠出来之后,然后添加蒙版2、shift+点击蒙版(关闭蒙版),然后再用钢笔扣下一个桃子,然后ctrl+回车关闭路径,  再打开关闭的蒙版,然后给关闭的路径填充白色,这样第二个桃子就出来了    ......
  • 还在用手吗?看别人怎么用眼睛玩水果忍者吧!
    TheEyeTribe(之前名为Senseye)是一家非常炫酷的技术公司,它致力研究如何通过眼球来控制手机或者平板。在去年12月的Techstars大会上,他们通过一个手机向外展示了一个眼球控制系统的雏形,并在LeWeb2012大会上展示了更新版本。现在他们准备把这项眼球跟踪技术推向市场,正在和手机制......
  • 904. 水果成篮
    力扣题目链接你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:你只有 两个 篮子,并且每个篮子只......
  • 【LeetCode滑动窗口专题】水果成篮 + 最小覆盖子串(hard)
    二刷刷到滑动窗口,发现有一些细节和遗漏,在此补充实际上关于滑动窗口的题还有一题:最小长度的子数组进入正题水果成篮LeetCode904水果成篮你正在探访一家农场,农场从左到......
  • 904.水果成篮——学习笔记
    题目:你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组fruits表示,其中fruits[i]是第i棵树上的水果种类。你想要尽可能多地收集水果。然而,农场......
  • 力扣904 水果成篮
    水果成篮:按顺序取,问连续最多的两个数有几个。总体思路:1、如果是我们要的数,直接数量加一;2、如果是新的数,那么j-1的位置的数就是第一个数,j位置的数就是第二个数。并且要......
  • css布局与一个水果库存静态页面实现
    资料来源于:B站尚硅谷JavaWeb教程(全新技术栈,全程实战),本人才疏学浅,记录其笔记以供他日回顾CSS布局视频链接水果库存静态页面实现视频链接知识点<!--position:abs......