目录题目要求阅读理解思路:滑动窗口Java数组哈希表c++数组哈希表总结题目要求 阅读理解 读完题的我be like: 去看了遍英文版就懂了,题目中的种类【type】不是种类数&
读完题的我be like:
去看了遍英文版就懂了,题目中的种类【type】不是种类数……每个数字代表一种树【用个字母啥的表示或者翻译成类型就好理解多了】,那么目标就是找从哪里开始可以维持两种数字(种类)无规律交替出现的状态最久,这个最久是多少棵树。
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;
}
}
可使用哈希表构建窗口,降低空间复杂度。
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;
}
}
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;
}
};
可使用哈希表构建窗口,降低空间复杂度。
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;
}
};
以上就是Java C++题解LeetCode904水果成篮的详细内容,更多关于Java C++题解水果成篮的资料请关注编程网其它相关文章!
--结束END--
本文标题: Java C++题解leetcode904水果成篮
本文链接: https://www.lsjlt.com/news/169686.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
一口价域名售卖能注册吗?域名是网站的标识,简短且易于记忆,为在线用户提供了访问我们网站的简单路径。一口价是在域名交易中一种常见的模式,而这种通常是针对已经被注册的域名转售给其他人的一种方式。
一口价域名买卖的过程通常包括以下几个步骤:
1.寻找:买家需要在域名售卖平台上找到心仪的一口价域名。平台通常会为每个可售的域名提供详细的描述,包括价格、年龄、流
443px" 443px) https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294.jpg https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294-768x413.jpg 域名售卖 域名一口价售卖 游戏音频 赋值/切片 框架优势 评估指南 项目规模
0