当前位置: 代码迷 >> 综合 >> Leetcode每日一题:904.fruit-into-baskets(水果成篮)
  详细解决方案

Leetcode每日一题:904.fruit-into-baskets(水果成篮)

热度:39   发布时间:2024-02-22 03:08:10.0

在这里插入图片描述思路:这道题的本质就是在一个数组中,找到这么一个子数组,使得这个子数组只有两个不同的数值,并且子数组的长度达到最大;用暴力的解法肯定会超时,这里沿用了KMP的字符串匹配方法;
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
语文能力有限,无法将整个过程很好地描述出来,自己动手按照代码跑一边即可,时间复杂度为O(n);

int totalFruit(vector<int> &tree)
{
    int len = tree.size();int l = 0, r = 0;int pre = tree[0];while (r < len){
    if (tree[r] != tree[l]){
    break;}else{
    r++;}}int now = tree[r];int start_next = r;int max = 0;while (r < len){
    if (tree[r] != now) {
    if (tree[r] == pre) //当前值与pre相等,为了保证start_next指向下一个子数组的左端点,需要交换pre和now的值,并更新start_next的值{
    pre = now;now = tree[r];start_next = r;}else //当前值与now和pre都不想等,此时需要判断是否需要更新max,并做好下一个子数组的初始工作;{
    if (r - l > max)max = r - l;l = start_next;pre = tree[start_next];start_next = r;now = tree[r];}}r++;}if (r - l > max){
    max = r - l;}return max;
}