904.水果成篮(C++写法)

西安疫情终于开始有缓解的趋势啦!希望可以回家过年吧。关在宿舍没事做开始刷算法题,努力提升 up!up!up!

题目描述

你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。

你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:

你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。
你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。
一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。
给你一个整数数组 fruits ,返回你可以收集的水果的 最大 数目。

解法 滑动窗口

先确定左边界,然后遍历确定右边界,记录右边界的序号,而后对右边界进行扩大,当不满足条件就换左边界。

代码如下

class Solution {
public:
    int totalFruit(vector& fruits) {
           int j;      
           int midr = 0;
           int len;           //收集水果的数目
           int right;        
           int max=0;         //收集的最大数目
           if(fruits.size()==1)     //只有一颗树
           return 1;
           for(int i =0;i max ? len : max;
                 if(j==(fruits.size()-1))
                 return max;
                 j++;
             }

           }
         return max;
    }
};

坑点应该就是只有一颗树或者所有树都是一种的情况了,还有就是要理解左右边界的灵活变动。
904.水果成篮(C++写法)_第1张图片

你可能感兴趣的:(c++,开发语言,后端,leetcode,算法)