[读书笔记]《程序员代码面试指南》
来源:互联网 发布:virtualbox linux 编辑:程序博客网 时间:2024/06/04 09:45
栈和队列:
1、设计一个有getMin功能的栈
题目:
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
要求:
1、pop、push、getMin操作的时间复杂度都是O(1)
2、设计的栈类型可以输用现成的栈结构
package 设计一个有getMin功能的栈;import java.util.Stack;public class MyStack1 { private Stack<Integer> stackData; private Stack<Integer> stackMin; public MyStack1() { this.stackData = new Stack<Integer>(); this.stackMin = new Stack<Integer>(); } public void push(int newNum) { if(this.stackMin.isEmpty()) { this.stackMin.push(newNum); } else if(newNum <= this.getmin()) { this.stackMin.push(newNum); } this.stackData.push(newNum); } public int pop() { if(this.stackData.isEmpty()) { throw new RuntimeException("Your stack is Empty."); } int value = this.stackData.pop(); if(value == this.getmin()) { this.stackMin.pop(); } return value; } public int getmin() { if(this.stackMin.isEmpty()) { throw new RuntimeException("Your stack is empty."); } return this.stackMin.peek(); }}
由两个栈组成的队列
题目:
编写一个类,用两个栈实现队列,支持队列的基本操作(add、poll、peek)
package 由两个栈组成的队列;import java.util.Stack;public class TwoStackQueue { public Stack<Integer> stackPush; public Stack<Integer> stackPop; public TwoStackQueue() { stackPush = new Stack<Integer>(); stackPop = new Stack<Integer>(); } public void add(int pushInt) { stackPush.push(pushInt); } public int poll() { if(stackPop.empty() && stackPush.empty()) { throw new RuntimeException("Queue is empty!"); } else if(stackPop.empty()) { while (!stackPush.empty()) { stackPop.push(stackPush.pop()); } } return stackPop.pop(); } public int peek() { if(stackPop.empty() && stackPush.empty()) { throw new RuntimeException("Queue is empty!"); } else if(stackPop.empty()) { while (!stackPush.empty()) { stackPop.push(stackPush.pop()); } } return stackPop.peek(); }}
3、如何仅用递归函数和栈操作逆序一个栈
题目:
一个栈一次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1,将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构.
第二章
1、给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。
package 打印两个有序链表的公共部分;public class Node { public int value; public Node next; public Node(int data) { this.value = data; } public void printCommonPart(Node head1,Node head2) { System.out.println("Common Part: "); while (head1 != null && head2 != null) { if(head1.value < head2.value) { head1 = head1.next; } else if(head1.value > head2.value) { head2 = head2.next; } else { System.out.println(head1.value + " "); head1 = head1.next; head2 = head2.next; } } System.out.println(); }}
0 0
- [读书笔记]《程序员代码面试指南》
- 《程序员代码面试指南》Python实现(个人读书笔记)
- 《程序员健康指南》读书笔记
- 《程序员健康指南》读书笔记
- 程序员面试攻略读书笔记
- 《程序员面试宝典》读书笔记
- 【程序员代码面试指南】python版(第一天)
- 程序员代码面试指南-猫狗队列(c++)
- 《程序员面试代码指南》之栈和队列中的套路
- 《程序员面试代码指南》之约瑟夫环问题
- 针对左程云《程序员代码面试指南》一类说明
- 《程序员代码面试指南》第一章 栈和队列
- 《程序员代码面试指南》第四章 递归和动态规划
- 程序员面试不完全指南
- 程序员面试不完全指南
- 程序员面试指南
- 程序员面试攻略(读书笔记)
- 程序员面试宝典(读书笔记)
- yum install qemu找不到相关的包
- centos 7 网卡命令规则
- 将两列合并成一列
- android类
- git cherry-pick 把提交到A分支的部分commit 再提交到B分支上
- [读书笔记]《程序员代码面试指南》
- NSMutableString简介
- Brackets 插件
- 2016年1月TX电面题,记得多少写多少了【答案待更】
- 有用的shell命令集锦
- 提高android应用的效率--主要讲解listview的优化
- Unity_UGUI学习图集与使用(一)
- sublime text 3(Build 3103)最新注册码
- #include <>与#include ””的区别