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 socket的正确关闭姿势

    浅谈java socket的正确关闭姿势

    这篇文章主要介绍了java socket的正确关闭姿势,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 谈谈Spring Boot 数据源加载及其多数据源简单实现(小结)

    谈谈Spring Boot 数据源加载及其多数据源简单实现(小结)

    这篇文章主要介绍了谈谈Spring Boot 数据源加载及其多数据源简单实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • Java中枚举类型的一种使用方式

    Java中枚举类型的一种使用方式

    这篇文章主要介绍了Java中枚举类型的一种使用方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • springboot配置文件读取pom文件信息方式

    springboot配置文件读取pom文件信息方式

    这篇文章主要介绍了springboot配置文件读取pom文件信息方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • SpringBoot+MyBatis-Plus实现分页的项目实践

    SpringBoot+MyBatis-Plus实现分页的项目实践

    MyBatis-Plus是基于MyBatis的持久层增强工具,提供简化CRUD、代码生成器、条件构造器、分页及乐观锁等功能,极大简化了开发工作量并提高了开发效率,本文就来介绍一下SpringBoot+MyBatis-Plus实现分页的项目实践,感兴趣的可以了解一下
    2024-11-11
  • Java ynchronized重量级锁的核心原理详解

    Java ynchronized重量级锁的核心原理详解

    这篇文章主要为大家详细介绍了Java ynchronized重量级锁的核心原理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Mybatis往Mapper.xml文件中传递多个参数问题

    Mybatis往Mapper.xml文件中传递多个参数问题

    这篇文章主要介绍了Mybatis往Mapper.xml文件中传递多个参数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 强烈推荐MyBatis 三种批量插入方式的比较

    强烈推荐MyBatis 三种批量插入方式的比较

    这篇文章主要介绍了强烈推荐MyBatis 三种批量插入方式的比较,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • Java源码解析之Iterable接口

    Java源码解析之Iterable接口

    遍历集合我相信大部分coder都会遇到,也经常使用,而Java给我们提供了多种选择,接下来就让我们一起来看看吧,需要的朋友可以参考下
    2021-05-05
  • 解决springboot上传图片后无法立即访问需重启的问题

    解决springboot上传图片后无法立即访问需重启的问题

    这篇文章主要介绍了解决springboot上传图片后无法立即访问需重启的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12

最新评论