leetcode刷题----904.水果成篮

1.题目描述

leetcode刷题----904.水果成篮_第1张图片
leetcode刷题----904.水果成篮_第2张图片

2.思路

这题类似于求有两个字符的最长子串。
用一个向量lens记录下标为i的有两种水果的长度,最后输出lens中的最大值即可。
怎么求lens[i]的值呢?这里我们需要两个变量basket1,basket2记录水果的类型,两个变量index1,index2当出现第三种水果类型时可能需要切换的前两种水果的下标。
从左到右遍历tree数组,得到其中的一个元素tree[i]。
1.当basket1为空时,直接将tree[i]赋值给basket1,将i赋值给index1,同时将lens[1]置1。
2.当basket1不为空时:
(1)如果tree[i]==basket1,则len[i]=len[i-1]+1,同时根据tree[i]与tree[i-1]是否相等,决定是否更新index1。
(2)如果tree[i]!=basket1:

  1. 如果basket2为空,则直接将tree[i]赋值给basket2,将i赋值给index2,同时len[i]=len[i-1]+1。
  2. 如果basket2不为空:(1)如果tree[i]==basket2,len[i]=len[i-1]+1,同时根据tree[i]与tree[i-1]是否相等,决定是否更新index2; (2)如果tree[i]!=basket2,找到index1和index2中的较大值x和其对应的水果类型y,index1=x,basket1=y,len[i]=i-x+1,index2=i,basket2=tree[i]。
    附上代码:
#include 
#include 

using namespace std;
int totalFruit(vector& tree) {
    int len=tree.size();
    vector lens(len,0);
    int basket1,basket2;
    basket1=basket2=-1;
    int index1,index2;
    index1=index2=-1;
    for(int i=0;i>number;
    if(number<=0)
        return -1;
    vector test;
    for(int i=0;i>temp;
        test.push_back(temp);
    }
    cout<

3.运行结果

leetcode刷题----904.水果成篮_第3张图片

你可能感兴趣的:(leetcode刷题)