每日力扣-水果成篮

147 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情

每日力扣是一个专门用来讲力扣中国每天发布的每日一题的栏目。本专栏不提供题目的解答源码,只讲解思路,目的是养成每日刷题、提高自己手感,从而达到算法熟练的目标。

题目(已做删减处理)

你必须按照要求采摘水果:你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。

分析

一道典型的滑动窗口算法题。我们根据题目中得到的几个关键点来分析:

  1. 首先是篮子只有2个,那就意味着如果种类大于2的话,肯定是没办法的;
  2. 其实就是采集的规则。题目中描述的不太清楚。但是我们可以这么说,就是从任意位置开始,向左或这向右滑动,直到遍历所有的数组或者满足条件后返回数据;
  3. 最后就是题目的一些条件。我们可以从 1中得到,如果 水果的类型大于2,那肯定就要收缩窗口;否则的话,可以向右滑动数据组,扩大滑窗。

总结

一道我认为很难懂的滑动窗口算法题。难度并不适合在代码逻辑上,而是在题目理解上。我不明白这个题目的描述究竟是有问题,还是有问题,还是有问题。你完全看不懂它的描述。只有一步步地自己调试、去原网站确定项目的西姆,才能够理清它真正想表达的意思。

一旦你明白了题目的描述,那么这道题目其实就属于是最为熟悉的滑动窗口题目了。

解题证明

image.png