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

2023-05-04 LeetCode每日一题(摘水果)

2023-05-04每日一题

一、题目编号

2106. 摘水果

二、题目链接

点击跳转到题目位置

三、题目描述

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

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

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

四、解题代码

class Solution {
public:
    int maxTotalFruits(vector<vector<int>>& fruits, int startPos, int k) {
        int n = fruits.size();
        long long sum[400010];
        memset(sum, 0, sizeof(sum));
        for(int i = 0; i < n; ++i){
            sum[fruits[i][0]] = fruits[i][1]; 
        }
        for(int i = 1; i <= 200000; ++i){
            sum[i] += sum[i-1];
        }
        if(startPos == 0){
            return sum[min(200000, k)];
        }
        long long max0 = 0;
        for(int i = 0; i <= k; ++i){
            if(i == startPos){
                max0 = max(max0 ,sum[max(startPos, startPos - 2 * i + k)]);
            } else if(i < startPos){
                max0 = max(max0, sum[max(startPos, startPos - 2 * i + k )] - sum[startPos - i - 1]);
            }

            if(startPos + i <= 200000){
                if(max(k - 2 * i, 0) >= startPos){
                    max0 = max(sum[startPos + i], max0);
                } else{
                    max0 = max(max0, sum[startPos + i] - sum[startPos - max(k - 2 * i, 0) - 1]);     
                }
            }
        }
    return max0;
    }
};

五、解题思路

(1) 首先我们思考能走多少步,设步数为i。我们很容易可以根据题目来知晓,这个步数为0 ~ k。

(2) 那我们将问题转化成,我们该如何规划这i步,使得摘到的水果最多。我们根据贪心的原理可以很容易知晓,我们应该尽可能的利用上我们的步数。那么我们的问题就转化成一开始是往右走,还是一开始往左走。

(3) 这样我们可以根据往左走或者往右走的步数,规划出一个窗口。计算出该窗口中水果的数目,只要取水果数目最大的窗口即为最终的答案。

(4) 最后我们只需要用前缀和来求出遍历到的每一个窗口中水果的数目即可。


http://www.kler.cn/a/17769.html

相关文章:

  • JUC-locks锁
  • [ComfyUI]Flux:繁荣生态魔盒已开启,6款LORA已来,更有MJ6写实动漫风景艺术迪士尼全套
  • 【贪心算法】——力扣763. 划分字母区间
  • 招聘app开发,人才招聘、求职首要方式
  • VSCode中python插件安装后无法调试
  • 如何管理好自己的LabVIEW项目
  • 行为型模式-解释器模式
  • 了解进程控制
  • 错题汇总03
  • 顺序表和链表优缺点以及区别
  • MySQL索引
  • 涨薪60%,从小厂逆袭,坐上美团技术专家(面经+心得)
  • Java——和为S的连续正数序列
  • 【C++】机房预约系统
  • 使用【SD-WEBUI】插件生成单张图包含多个人物:分区域的提示词
  • bevfusion
  • Java线程池
  • 等保定级怎么做
  • spring boot整合Hibernate Validator分组校验
  • 如何在Firefox中使用最小字体
  • 基于Vue的个性化网络学习笔记系统
  • PBDB Data Service:Basis and precision of coordinates(坐标的基础和精度)
  • 学习Transformer前言(Self Attention Multi head self attention)
  • (5)Qt—ui常用类
  • webconsole使用方法(fastapi框架)
  • 【第四篇:解决校招面试中的测试设计题目】