Java C++题解leetcode904水果成篮
作者:AnjaVon 发布时间:2023-12-08 21:06:09
标签:Java,C++,题解,水果成篮
题目要求
阅读理解
读完题的我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的内容
来源:https://juejin.cn/post/7155315083826954248
0
投稿
猜你喜欢
- 一、前言用过Spring Cloud的同学都知道在使用动态配置刷新的我们要配置一个@RefreshScope 在类上才可以实现对象属性的的动
- Java BigDecimal的坑采坑处 BigDecimal bd =new BigDecimal(0.1);
- 前几天的一个晚上突然想到微信红包应该有一个随机算法,就自己试着写了下,也不知道对不对,看了看网上的说法,好像到现在为止官方也没有给出一个确切
- springcloud微服务包含的技术种类众多,eureka作为其注册中心,一直处于主流,但在今年已经处于永久停更状态,但其优秀的能力还是值
- spring schedule 动态配置执行时间之前saas平台实现动态修改定时任务的时间,都是通过xx-job这样的框架来实现,这样我们可
- 开篇Mybatis有个实用的功能就是逆向工程,能根据表结构反向生成实体类,这样能避免手工生成出错。市面上的教程大多都很老了,大部分都是针对m
- 本文实例为大家分享了Java实现坦克大战小游戏的具体代码,供大家参考,具体内容如下创作背景:n年前的学期末课题设计,从b站上学的,一个代码一
- SessionSession对象用于获取与数据库的物理连接。 Session对象是重量轻,设计了一个互动是需要与数据库每次被实例化。持久化对
- 记录web项目部署到阿里云服务器步骤(使用 web项目、阿里云服务器、Xftp、Xshell),敬请参考和指正1.将要部署的项目打包成WAR
- 效果自定义密码输入框,项目的一个界面需求,我把这个自定义的输入框提取出来作为这次内容的题目。输入前: 输入后: 输入1个
- @Value获取yml和properties配置参数Yml:#定时任务配置 application:
- 功能描述1、创建扑克牌。包括四种花色(黑桃,红心,梅花,方块),十三种点数(2-10,J,Q,K),不考虑大小王。2、创建两个玩家。包括玩家
- IDEA配置阿里规范插件P3C进入idea -》File -》 Settings -》Plugins到搜索框中搜索:Alibaba Java
- 之前从他人的博文,还有一些书籍中了解到 常量是放在常量池 中,细节的内容无从得知,总觉得面前的东西是一个几乎完全的黑盒,总是觉得不舒服,于是
- 问题springcloud 版本 为 Finchley.RELEASEspringboot 版本为 2.0.3.RELEASE现在有需求,/
- 大顶堆每个结点的值都大于或等于其左右孩子结点的值小顶堆每个结点的值都小于或等于其左右孩子结点的值对比图实现代码public class He
- 一、简介Android的消息机制主要是指Handler的运行机制,那么什么是Handler的运行机制那?通俗的来讲就是,使用Handler将
- ServletWebServerApplicationContext实现了父类AbstractApplicationContext的onRe
- 1概述众所周知,Java支持平台无关性、安全性和网络移动性。而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统
- 本文实例为大家分享了C#实现QQ聊天窗口的具体代码,供大家参考,具体内容如下效果图:using System;using System.Co