当前位置: 首页 > news >正文

Leetcode每日刷题之904.水果成篮

1.题目解析

本题的题目要求较长,不过理解起来较为简单,就是在给定数组内找出最长子数组,并且该最长子数组只能有两种数字,最后返回该符合条件的最长子数组的长度即可

题目来源:904.水果成篮 

2.算法原理

本题的核心是找出符合条件的最长子数组,首先想到的一定是暴力枚举所有符合条件的子数组最后找出最长的即可

在经过优化的算法就是"滑动窗口"算法,

1.即使用两个指针,让right指针不断向后遍历而left指针不动,在left-right这一段窗口内加入数据称为入窗口

2.当窗口内数字的种类超过两种则开始出窗口,也就是left指针移动而right指针不动,直到窗口中数字种类为2种,这时更新子数组长度

3.这里使用数组hash模仿哈希表,因为由题目可知数组中数字范围小于10^5,所以创建一个hash[100001]即可,然后使用kinds变量统计窗口内数字种类

4.hash[100001]存储每个数字出现的次数,当出窗口时某个数字出现次数为0则将种类kinds--即可,最后更新长度直到找出最长符合子数组的长度即可

3.代码展示

class Solution {
public:int totalFruit(vector<int>& fruits) {int n = fruits.size();int hash[100001] = { 0 };int len = 0;for(int left = 0,right = 0,kinds = 0;right < n;right++){if(hash[fruits[right]] == 0){kinds++;}hash[fruits[right]]++;while(kinds > 2){hash[fruits[left]]--;if(hash[fruits[left]] == 0){kinds--;}left++;}len = max(len,right - left + 1);}return len;}
};

 


http://www.mrgr.cn/news/13010.html

相关文章:

  • 2024Go语言面试宝典Golang零基础实战项目面试八股力扣算法笔记等
  • [Algorithm][综合训练][比那名居的桃子][chika和蜜柑][礼物的最大价值]详细讲解
  • 微商城系统api.php接口存在任意文件上传漏洞
  • 快速学习安装使用etcd
  • 识别不到开发板串口问题(故事版)
  • 【动态规划】背包问题 - 二维费用的01背包问题
  • Docker 搭建redis集群
  • ES6 class小挑战
  • android13 隐藏状态栏里面的背光调节 隐藏下拉栏背光调节
  • 219. 存在重复元素 II【 力扣(LeetCode) 】
  • java反射机制
  • [java][代码]使用java在mongodb上传下载文件
  • 鸿蒙( Beta5版)开发实战:基于AVCodecKit【音视频解码】
  • 【已解决】Vue Duplicate keys detected: ‘[object Object]’
  • 【STM32】FMC
  • 操作符详解
  • go slices.Clone官方文档
  • 力扣(单调递增的数字)
  • AtCoder Beginner Contest 368 题ABCD详细题解(C++,Python)
  • 无法验证 Anaconda 仓库证书