leetCode 904水果成篮

简介: leetCode 904水果成篮

题目描述

你正在参观一个农场,那里从左到右有一排果树排列。这些树由一个整数数组水果表示,其中水果[i]是第i棵树产生的水果类型。
你想收集尽可能多的水果。但是,所有者有一些严格的规则,你必须遵守: 你只有两个篮子,每个篮子只能装一种水果。每个篮子的水果用量没有限制。
从你选择的任何一棵树开始,你必须从每棵树(包括开始树)中选择一个水果,同时向右移动。摘出来的水果必须放进你的一个篮子里。
一旦你到达棵果实不能装进篮子的树,你必须停下来。 给定整数数组果实,返回您可以选择的最大果实数量。

Example 1:

Input: fruits = [1,2,1] Output: 3 Explanation: We can pick from all 3
trees.

Example 2:

Input: fruits = [0,1,2,2] Output: 3 Explanation: We can pick from
trees [1,2,2]. If we had started at the first tree, we would only pick
from trees [0,1].

Example 3:

Input: fruits = [1,2,3,2,2] Output: 4 Explanation: We can pick from
trees [2,3,2,2]. If we had started at the first tree, we would only
pick from trees [1,2].

Constraints:

1 <= fruits.length <= 105 0 <= fruits[i] < fruits.length

哈哈哈,是不是被题目直接搞晕了,其实这道题并不复杂,只是翻译过来以后不好理解,我来给大家翻译翻译。

您正在参观一个农场,该农场有一排从左到右排列的果树。树由整数数组fruits表示,其中水果[i]是第i棵树产生的水果类型。你有两个篮子,你要做的就是去摘水果,但是前提是每个篮子只能装一种水果,意思就是我们只能携带两种不同类型的水果,并且这两种水果的在数组中的位置是挨着的。
由此我们可以考虑滑动窗口,代码实现如下:

class Solution {
    public int totalFruit(int[] fruits) {
          int left = 0,right = 0,ans = 0;
        int ln = fruits[left],rn = fruits[right];
        while(right < fruits.length){
            if(fruits[right] == rn || fruits[right] == ln){
                ans =Math.max(ans,right + 1 - left);
                right++;
            }else{
                left = right - 1;
                ln = fruits[left];
                while(left >= 1 && fruits[left - 1] == ln) left--;
                rn = fruits[right];
                ans = Math.max(ans,right + 1 - left);
            }
        }
        return ans;

    }
}
相关文章
|
消息中间件 Java 中间件
秒懂消息队列MQ,万字总结带你全面了解消息队列MQ
消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件,所以掌握好消息队列MQ就变得极其重要。接下来我就将从零开始介绍什么是消息队列?消息队列的应用场景?如何进行选型?如何在Spring Boot项目中整合集成消息队列。
23990 10
秒懂消息队列MQ,万字总结带你全面了解消息队列MQ
|
缓存 算法 Java
Java本地高性能缓存实践
本篇博文将首先介绍常见的本地缓存技术,对本地缓存有个大概的了解;其次介绍本地缓存中号称性能最好的Cache,可以探讨看看到底有多好?怎么做到这么好?最后通过几个实战样例,在日常工作中应用高性能的本地缓存。
|
11月前
|
IDE Java 编译器
Java“找不到符号” 错误怎么查找解决
“找不到符号”是Java编程中常见的编译错误,通常表明代码试图访问未声明或不可见的符号(如类、方法或变量)。解决此问题需检查拼写、导入包是否正确及作用域是否合适。确保使用正确的类路径和库,可有效避免此类错误。若问题依旧,查阅官方文档或使用调试工具定位错误亦为良策。
5685 10
|
IDE Java Maven
【Java】已解决:java.lang.NoSuchMethodError异常
【Java】已解决:java.lang.NoSuchMethodError异常
5597 0
|
供应链 安全 Java
安全同学讲Maven间接依赖场景的仲裁机制
去年的Log4j-core的安全问题,再次把供应链安全推向了高潮。在供应链安全的场景,蚂蚁集团在静态代码扫描平台-STC和资产威胁透视平台-哈勃这2款产品在联合合作下,优势互补,很好的解决了直接依赖和间接依赖的场景。但是由于STC是基于事前,受限于扫描效率存在遗漏的风险面,而哈勃又是基于事后,存在修复时间上的风险。基于此,笔者尝试寻找一种方式可以同时解决2款产品的短板。
安全同学讲Maven间接依赖场景的仲裁机制
|
设计模式 算法 Java
设计模式最佳实践探索—策略模式
根据不同的应用场景与意图,设计模式主要分为创建型模式、结构型模式和行为型模式三类。本文主要探索行为型模式中的策略模式如何更好地应用于实践中。
663 0
设计模式最佳实践探索—策略模式
|
消息中间件 数据库 RocketMQ
还不知道事务消息吗?这篇文章带你全面扫盲!
阿粉最近碰到个一个需求,正好需要使用 RocketMQ 事务消息,所以阿粉专门学习了一下。
还不知道事务消息吗?这篇文章带你全面扫盲!
|
存储 安全 Java
面试突击18:为什么ConcurrentHashMap是线程安全的?
ConcurrentHashMap是HashMap的多线程版本,HashMap在并发操作时会有各种问题,比如死循环问题、数据覆盖等问题。而这些问题,只要使用ConcurrentHashMap就可以完美解决了,那问题来了,ConcurrentHashMap是如何保证线程安全的?它的底层又是如何实现的?接下来我们一起来看。
7630 1
面试突击18:为什么ConcurrentHashMap是线程安全的?
|
Java 测试技术 Maven
NoSuchMethodError 常见原因及解决方法
导读 『StabilityGuide』是阿里多位阿里技术工程师共同发起的稳定性领域的知识库开源项目,涵盖性能压测、故障演练、JVM、应用容器、服务框架、流量调度、监控、诊断等多个技术领域,以更结构化的方式来打造稳定性领域的知识库,欢迎您的加入。
16138 0

热门文章

最新文章