Java C++题解leetcode904水果成篮

 更新时间:2022年10月19日 11:53:45   作者:AnjaVon  
这篇文章主要为大家介绍了Java C++题解leetcode904水果成篮示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

题目要求

阅读理解

读完题的我be like:

去看了遍英文版就懂了,题目中的种类【type】不是种类数……每个数字代表一种树【用个字母啥的表示或者翻译成类型就好理解多了】,那么目标就是找从哪里开始可以维持两种数字(种类)无规律交替出现的状态最久,这个最久是多少棵树。

思路:滑动窗口

  • 窗口里可放两棵树,一棵是枣树,另一棵还是枣树。 向后遍历整排树,并更新最长状态。

Java

数组

class Solution {
    public int totalFruit(int[] fruits) {
        int res = 0;
        int[] win = new int[fruits.length + 10];
        for (int l = 0, r = 0, tot = 0; r < fruits.length; r++) {
            if (++win[fruits[r]] == 1)
                tot++; // 当前种类统计
            while (tot > 2) {
                if (--win[fruits[l++]] == 0)
                    tot--;
            }
            res = Math.max(res, r - l + 1); // 维护最长状态
        }
        return res;
    }
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

哈希表

可使用哈希表构建窗口,降低空间复杂度。

  • 键对应篮子,值对应同类树数量;
  • 当值为000注意要彻底删掉键。
class Solution {
    public int totalFruit(int[] fruits) {
        Map<Integer, Integer> win = new HashMap<Integer, Integer>();
        int l = 0, res = 0;
        for (int r = 0; r < fruits.length; r++) {
            win.put(fruits[r], win.getOrDefault(fruits[r], 0) + 1);
            while (win.size() > 2) { // 窗口大小即种类数
                win.put(fruits[l], win.get(fruits[l]) - 1);
                if (win.get(fruits[l]) == 0)
                    win.remove(fruits[l]); // 彻底删除键值
                l++;
            }
            res = Math.max(res, r - l + 1);
        }
        return res;
    }
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

C++

数组

class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        int res = 0;
        int win[fruits.size() + 10];
        memset(win, 0, sizeof(win));
        for (int l = 0, r = 0, tot = 0; r < fruits.size(); r++) {
            if (++win[fruits[r]] == 1)
                tot++; // 当前种类统计
            while (tot > 2) {
                if (--win[fruits[l++]] == 0)
                    tot--;
            }
            res = max(res, r - l + 1); // 维护最长状态
        }
        return res;
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

哈希表

可使用哈希表构建窗口,降低空间复杂度。

class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        unordered_map<int, int> win;
        int l = 0, res = 0;
        for (int r = 0; r < fruits.size(); r++) {
            if (win.count(fruits[r]))
                win[fruits[r]]++;
            else
                win[fruits[r]] = 1;
            while (win.size() > 2) { // 窗口大小即种类数
                win[fruits[l]]--;
                if (win[fruits[l]] == 0)
                    win.erase(fruits[l]); // 彻底删除键值
                l++;
            }
            res = max(res, r - l + 1);
        }
        return res;
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

总结

  • 今天不想rust了……主体和这两种语言差不多,要多些类型转换balabala的内容

以上就是Java C++题解leetcode904水果成篮的详细内容,更多关于Java C++题解水果成篮的资料请关注脚本之家其它相关文章!

相关文章

  • Java中MapStruct入门使用及对比

    Java中MapStruct入门使用及对比

    MapStruct是一个Java注解处理器框架,用于简化Java Bean之间的映射,本文主要介绍了Java中MapStruct入门使用及对比,感兴趣的可以了解一下
    2023-12-12
  • Java如何根据不同系统动态获取换行符和盘分割符

    Java如何根据不同系统动态获取换行符和盘分割符

    这篇文章主要介绍了Java如何根据不同系统动态获取换行符和盘分割符,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • java多线程关键字final和static详解

    java多线程关键字final和static详解

    这篇文章主要介绍了java多线程关键字final和static详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • JAVA实战练习之图书管理系统实现流程

    JAVA实战练习之图书管理系统实现流程

    随着网络技术的高速发展,计算机应用的普及,利用计算机对图书馆的日常工作进行管理势在必行,本篇文章手把手带你用Java实现一个图书管理系统,大家可以在过程中查缺补漏,提升水平
    2021-10-10
  • Java实现url加密处理的方法示例

    Java实现url加密处理的方法示例

    这篇文章主要介绍了Java实现url加密处理的方法,涉及java基于base64、编码转换实现加密解密相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • java 交换两个数据的方法实例详解

    java 交换两个数据的方法实例详解

    这篇文章主要介绍了java 交换两个数据的方法实例详解的相关资料,需要的朋友可以参考下
    2016-12-12
  • 32位和64位皆适用的MyEclipse安装教程

    32位和64位皆适用的MyEclipse安装教程

    这篇文章主要为大家详细介绍了32位和64位皆适用的MyEclipse安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • IDEA2023.1.3安装教程及下载(图文)

    IDEA2023.1.3安装教程及下载(图文)

    最新变化是在IDEA 2023.1中,对新UI做出了大量改进,本文主要介绍了IDEA2023.1.3安装教程及下载,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • SPRING FRAMEWORK BEAN作用域和生命周期原理解析

    SPRING FRAMEWORK BEAN作用域和生命周期原理解析

    这篇文章主要介绍了SPRING FRAMEWORK BEAN作用域和生命周期原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 零基础如何系统的学习Java

    零基础如何系统的学习Java

    这篇文章主要介绍了零基础如何系统的学习Java,很多朋友纠结这个问题,教材书不知道从何学起,今天小编给大家分享一篇教程帮助到家梳理这方面的知识
    2020-07-07

最新评论