【问题描述】[中等]

【解答思路】

1. 暴力

复杂度分析

class MaxQueue {Queue<Integer> queue = new LinkedList();int maxValue;public MaxQueue() {queue = new LinkedList();}public int max_value() {if(queue.isEmpty()) return -1;return maxValue;}public void push_back(int value) {queue.offer(value);if(value > maxValue) maxValue = value;}public int pop_front() {if(queue.isEmpty()) return -1;int ans = queue.poll();if(ans == maxValue){int size = queue.size();if(size == 0){maxValue = Integer.MIN_VALUE;return ans;}maxValue = queue.peek();for(int i = 0; i<size; i++)this.push_back(queue.poll());}return ans;}
}
2. 维护一个单调的双端队列


时间复杂度:O(1) 空间复杂度:O(N)

public class MaxQueue {Queue<Integer> queue;LinkedList<Integer> max;public MaxQueue() {queue = new LinkedList<>();max = new LinkedList<>();//LinkedList是双端链表}public int max_value() {return max.size()==0?-1:max.getFirst();}public void push_back(int value) {queue.add(value);while(max.size()!=0&&max.getLast()<value){//注意:这里第二个判断条件不能带等号,即max中对于当前queue中的具有相同值的元素会全部存储,而不是存储最近的那个。max.removeLast();}max.add(value);}public int pop_front() {if(max.size()!=0&&queue.peek().equals(max.getFirst()))//Integer类型的值的比较不能直接使用==max.removeFirst();return queue.size()==0?-1:queue.poll();}/*** Your MaxQueue object will be instantiated and called as such:* MaxQueue obj = new MaxQueue();* int param_1 = obj.max_value();* obj.push_back(value);* int param_3 = obj.pop_front();*/
}

【总结】

1.ArrayList与LinkedList对比

ArrayList是顺序结构,所以定位很快,但插入,删除数据慢。
LinkedList 是链表结构,定位慢,但插入,删除数据快。

2.ArrayList与LinkedList常见方法

ArrayList实现了List接口,常见方法有:
add(); contains(); get(); indexOf():定位对象所处的位置; remove(); size(); toArray(); toString();//转换为字符串

LinkedList也实现了List接口外,可以实现上述ArrayList中的常用方法,此外:
1.LinkedList还实现了双向链表结构Deque,可以很方便的在头尾插入删除数据。
LinkedList link = new LinkedList<>();
常用方法:
addFirst(); addLast();
getFirst(); getLast();
removeFirst(); removeLast();

2.LinkedList除了实现了List和Deque外,还实现了Queue接口(队列),
Queue是先进先出队列 FIFO
Queue< class > queue = new LinkedList<>();
常用方法:
poll()取出第一个元素;
peek()查看第一个元素;
offer()在最后添加元素,可用add()替换;
扩展
先进后出FILO Stack栈
Stack stack = new Stack<>();
常用方法:
push();可用add();代替
pop();输出末尾的元素相当于LinkedList中的removeLast();
peek();查看最后一个元素,相当于getLast();

3.做题需要不断总结整理归纳

建议和[剑指offer][JAVA]面试题第[09]题[用两个栈实现队列]LinkedList(https://blog.csdn.net/dadongwudi/article/details/106478719)一起学习

参考链接:https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/solution/mian-shi-ti-59-ii-javashi-xian-yuan-li-he-mian-shi/
参考链接:https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/solution/qi-shi-bu-tai-li-jie-jun-tan-fu-za-du-by-acnesu/
参考链接:https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/solution/mian-shi-ti-59-ii-dui-lie-de-zui-da-zhi-by-leetcod/

[剑指offer]面试题第[59-2]题[JAVA][队列的最大值][暴力][双端队列]相关推荐

  1. 剑指offer面试题6 重建二叉树(java)

    注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 1 package com.xsf.Sor ...

  2. 剑指offer——面试题59:对称的二叉树

    剑指offer--面试题59:对称的二叉树 Solution1: 书上的思路就挺好的 书中的思路:针对二叉树的前序遍历,定义一种遍历算法,先遍历右子结点再遍历左子结点,并考虑进NULL的情况 /* s ...

  3. 【剑指Offer面试题】 九度OJ1510:替换空格

    c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...

  4. 剑指offer 面试题三 找出数组中重复的数字

    1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...

  5. [剑指offer]面试题第[68-2]题[Leetcode][第236题][JAVA][二叉搜索树的最近公共祖先][递归]

    [问题描述][中等] 235/68-1 搜索二叉树 236/68-2 二叉树 [解答思路] 递归 时间复杂度:O(N) 空间复杂度:O(N) 情况 1. , 2. , 3. , 4. 的展开写法如下. ...

  6. [剑指offer]面试题第[57]题[Leetcode][第167题][JAVA][和为s的两个数字][两数之和][HashSet][二分][双指针]

    [剑指offer]面试题第[57]题[Leetcode][第167题][第1题] 有序无序之分 题目输出不同之分 以下解法按照[剑指offer]面试题第[57]题进行题解 [问题描述][简单] 输入一 ...

  7. 两个数组中对应的下标的值合成一个新的数组_剑指 offer 面试题精选图解 03 . 数组中重复的数字

    今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字. 题目链接:https://leetcode-cn.com/problems/shu-zu-zhon ...

  8. 剑指offer面试题[64]-数据流中的中位数

    题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 分 ...

  9. 剑指offer面试题[30]-最小的k个数

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 分析思路:         这道题最简单的思路莫过于把输入的n个数排 ...

最新文章

  1. Task02:青少年软件编程(Scratch)等级考试模拟卷(二级)
  2. 《新一代城市大脑建设与发展》专家研讨会在京举办
  3. [转]深入理解linux内核list_head
  4. 如何防止应用程序泄密?
  5. 4由通道检测_博唐平四通道糖化血红蛋白检测仪通过上海临检中心性能验证(二)...
  6. 解决UICollectionViewCell/UITableViewCell因重用机制导致的错乱问题
  7. java oracle分页查询语句_oracle分页查询语句,java得到分页查询语句的方法
  8. 漫画:什么是字符串匹配算法?
  9. 老板不在,你不得不做出越权的决定,咋办?(考试题系列)
  10. Vscode 调试:跟踪局部变量的变化
  11. 关于用密码保护 macOS 文件夹的方法
  12. 开发环境各个版本的下载
  13. 解决:Word仿宋字体显示不正确,仿宋GB2312的问题
  14. 在线全网音乐搜索下载源码
  15. php切图工具,前端切图常见技巧
  16. oracle select into from 用法,sql select into用法
  17. 刘涛入职阿里,年薪超过欧阳娜娜!揭秘阿里巴巴的明星员工和职级薪资!
  18. 小米手机:雷布斯的米饭刚下锅
  19. <<视觉问答>>2021:Check It Again: Progressive Visual Question Answering via Visual Entailment
  20. 计算机毕业设计Java服装定制管理系统(源码+系统+mysql数据库+lw文档)

热门文章

  1. marquee 移动属性
  2. hexo 环境变量_小白使用 Github + Hexo 从 0 搭建一个博客
  3. 生活感悟——和尾号990的滴滴师傅的聊天
  4. .net core linux安装
  5. php pdo更新,php - 使用PDO和MySQL更新查询
  6. python3.5安装scrapy_Python3.5 win7安装scrapy
  7. web学习2--理解MVC及快速入门
  8. 数据库的垂直切分和水平切分
  9. Mysql中int(M)的含义
  10. 网页里面的下拉框与数据库交互