peek

程序员面试金典-面试题 03.01. 三合一

人盡茶涼 提交于 2020-03-04 17:59:00
题目: 三合一。描述如何只用一个数组来实现三个栈。 你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。 构造函数会传入一个stackSize参数,代表每个栈的大小。 示例1: 输入: ["TripleInOne", "push", "push", "pop", "pop", "pop", "isEmpty"] [[1], [0, 1], [0, 2], [0], [0], [0], [0]] 输出: [null, null, null, 1, -1, -1, true] 说明:当栈为空时`pop, peek`返回-1,当栈满时`push`不压入元素。 示例2: 输入: ["TripleInOne", "push", "push", "push", "pop", "pop", "pop", "peek"] [[2], [0, 1], [0, 2], [0, 3], [0], [0], [0], [0]] 输出: [null, null, null, null, 2, 1, -1, -1] 分析: 开辟数组的大小为stackNum*3+3,平分数组作为三个栈存储的空间,额外再给三个位置用来记录每个栈存储元素的个数,就用

java 栈的基本操作

◇◆丶佛笑我妖孽 提交于 2020-02-27 05:56:52
1、实例化 Stack stack = new Stack(); 2、进栈 stack.push(Object);//返回的是入栈的内容 stack.add(Object);//返回的是true或false 3、出栈 stack.pop();//输出并删除栈顶元素 stack.peek();//输出不删除栈顶元素 4、判断是否为空 stack.isEmpty(); 5、输出栈([ , , , …]) System.out.println(stack); 6、查看某元素在栈中的为重,计数从1开始 int index = stack.search("a"); 来源: oschina 链接: https://my.oschina.net/u/4167465/blog/3167498

lc 0226

不打扰是莪最后的温柔 提交于 2020-02-26 11:47:45
目录 ✅ 232. 用栈实现队列 描述 解答 cpp py ✅ 496. 下一个更大元素 I 描述 解答 java py ✅ 232. 用栈实现队列 https://leetcode-cn.com/problems/implement-queue-using-stacks 描述 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。 示例: MyQueue queue = new MyQueue(); queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.pop(); // 返回 1 queue.empty(); // 返回 false 说明: 你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。 假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。 来源:力扣(LeetCode) 链接:https://leetcode-cn

Spring WebFlux -04-操作符-05-更多

拥有回忆 提交于 2020-02-26 07:25:24
(1)除了以上几个常见的操作符意外,Reactor中提供了非常丰富的操作符。 (2)用于编程方式自定义生成数据流的create和generate等及其变体方法。 (3)用于“无副作用的peek(我的理解就是不会消费数据)”场景的doOnNext、doOnError、doOnComplete、doOnSubscribe、doOnCancel等及其变体方法。 (4)用于数据流转换的when、and/or、merge、concat、collect、count、repeat等及其变体方法。 (5)用于过滤/拣选的take、first、last、sample、skip、limitRequest等及其变体方法。 (6)用于错误处理的timeout、onErrorReturn、onErrorResume、doFinally、retryWhen等及其变体方法。 (7)用于分批的window、buffer、group等及其变体方法。 (8)用于线程调度的publishOn和subscribeOn方法。 更多操作请见官方文档: https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html 来源: oschina 链接: https://my.oschina.net/u/3777515/blog

《软件架构基础》- 函数式编程

假装没事ソ 提交于 2020-02-25 23:16:26
函数式编程 它属于“结构化编程”的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用 特点 函数作为一等公民 $("button").click(function(){ $("li").each(function(){ alert($(this).text()) }); }); 无副作用 函数的副作用指的是函数在调用过程中,除了给出了返回值外,还修改了函数外部的状态,比如,函数在调用过程中,修改了某一个全局状态。函数式编程认为,函数的副用作应该被尽量避免。 函数做了除了约定之外的其它事情 引用透明 引用透明(Referential transparency),指的是函数的运行不依赖于外部变量或“状态”,只依赖于输入的参数,任何时候只要参数相同,引用函数所得到的返回值总是相同的。 申明式的(Declarative) 相对于命令式(imperative)而言,命令式的程序设计喜欢大量使用可变对象和指令 申明式的编程:申明你的用意 public static void imperative(){ int[] iArr={1,3,4,5,6,9,8,7,4,2}; for(int i=0;i<iArr.length;i++){ System.out.println(iArr[i]); } } public static void declarative(){ int[] iArr={1

如何使用两个堆栈实现队列?

落爺英雄遲暮 提交于 2020-02-25 20:42:11
假设我们有两个堆栈而没有其他临时变量。 是否可以仅使用两个堆栈“构造”队列数据结构? #1楼 public class QueueUsingStacks<T> { private LinkedListStack<T> stack1; private LinkedListStack<T> stack2; public QueueUsingStacks() { stack1=new LinkedListStack<T>(); stack2 = new LinkedListStack<T>(); } public void Copy(LinkedListStack<T> source,LinkedListStack<T> dest ) { while(source.Head!=null) { dest.Push(source.Head.Data); source.Head = source.Head.Next; } } public void Enqueue(T entry) { stack1.Push(entry); } public T Dequeue() { T obj; if (stack2 != null) { Copy(stack1, stack2); obj = stack2.Pop(); Copy(stack2, stack1); } else { throw new

最小栈

十年热恋 提交于 2020-02-21 23:52:39
题目链接: 涉及知识: 栈 题目要求: 通过已学的数据结构实现一个最小栈,可以实现 push、pop、top 和 getMin ,分别表示入栈、出栈、返回栈顶元素和返回当前栈中元素的最小值。并且要求 getMin 方法的时间复杂度为常数时间。 实现思路: 使用两个栈来实现。 数据栈:按入栈的顺序保存元素。 辅助栈:只保存比当前栈顶元素小的元素。(初始状态栈为空保存第一个元素) 在出栈时,当数据栈直接出栈,辅助栈当且仅当弹出的数据栈的元素的值等于栈顶元素的值的时候才出栈。 为什么辅助栈入栈的时候要小于等于? 小于等于是因为可能连续入栈的多个元素相等,且是最小的,如果辅助栈中只保存一份,那么当数据栈出栈的时候,弹出若干个相等元素中的一个时,便将辅助栈中保存的值弹出,出错。 代码实现: import java.util.Stack; /* * @lc app=leetcode.cn id=155 lang=java * * [155] 最小栈 */ class MinStack { Stack<Integer> s1 = null; Stack<Integer> s2 = null; /** * initialize your data structure here. * 使用两个栈保存数据,s1 按插入顺序保存,s2 永远保存比栈顶小的元素 * */ public MinStack()

包含min函数的栈

浪子不回头ぞ 提交于 2020-02-11 18:37:33
题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)) 解题思路: 建立多一个辅助栈,用来存最小值 代码实现 package com . letcode . stackqueue ; import java . util . Stack ; public class No2 { Stack < Integer > stack1 = new Stack < > ( ) ; //辅助栈,存最小值的,大小与原栈一样,若最小值无更新,则存入上一个最小值 Stack < Integer > stack2 = new Stack < > ( ) ; private void push ( int node ) { stack1 . push ( node ) ; if ( stack2 . isEmpty ( ) ) stack2 . push ( node ) ; else stack2 . push ( node > stack2 . peek ( ) ? stack2 . peek ( ) : node ) ; } private int pop ( ) { if ( ! stack1 . isEmpty ( ) ) { stack1 . pop ( ) ; stack2 . pop ( ) ; } return stack1 .

【Java基础】Stack基础

北城余情 提交于 2020-02-01 22:59:38
文章目录 一.Java集合架构图 二.栈的概念 1.什么是栈? 2.栈的基本操作 3.为什么Java的集合类没有单独的Stack接口呢? 三.Stack的作用 四.Stck小结 一.Java集合架构图 点击放大查看 二.栈的概念 1.什么是栈? 栈( Stack )是一种 后进先出(LIFO:Last In First Out) 的数据结构。 什么是 后进先出LIFO 呢? 最后进Stack的元素一定最先出Stack。 如何做到这一点呢? 只需要把队列的一端封死 因此, Stack只能不断地往Stack中 压入(push) 元素, 最后 进去的必须 最先 出(pop)`来 类似于下面的甜甜圈面包, 最先放的在最下面,最后吃, 最后放的在最前面,最先吃 2.栈的基本操作 Stack只有 入栈 和 出栈 的操作: 方法 描述 push(E) 把元素压栈 pop(E) 把栈顶的元素“弹出” peek(E) 取栈顶元素但不弹出 在Java中,我们用 Deque(双端队列) 可以实现Stack的功能: 方法 描述 push(E)/addFirst 把元素压栈 pop(E)/removeFirst() 把栈顶的元素“弹出” peek(E)/peekFirst() 取栈顶元素但不弹出 3.为什么Java的集合类没有单独的Stack接口呢? Java有个 遗留类 名字就叫Stack,出于兼容性考虑

LeetCode 232题用栈实现队列(Implement Queue using Stacks) Java语言求解

大憨熊 提交于 2020-02-01 09:27:15
题目链接 https://leetcode-cn.com/problems/implement-queue-using-stacks/ 题目描述 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。 示例: MyQueue queue = new MyQueue(); queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.pop(); // 返回 1 queue.empty(); // 返回 false 思路 使用两个栈来完成操作, 首先全部进入第一个栈,再全部进入第二个栈,用图来演示一下: 首先进入栈1; 入栈1 然后出栈1,入栈2; 出栈1入栈2 再出栈2。 出栈2 由图可以知道,用两个栈即可完成队列的操作; 分为下面三种情况 Stack_1空,Stack_2有元素,这时push()操作让Stack_1进行push();pop()操作,只需让Stack_2进行pop();peek()操作,也只需让Stack_2进行peek()就可以了;这时队列不为空; Stack_1不空,Stack_2空,这时push()操作让Stack_1进行push();pop()操作需要将Stack