面试题21:包含min函数的栈

import java.util.Stack;

public class Solution {
private Stack<Integer> stack = new Stack<Integer>();
private Stack<Integer> minStack = new Stack<Integer>();
public void push(int node) {
if(minStack.isEmpty() || node <= minStack.peek()){
minStack.push(node);
}
stack.push(node);
} public void pop() {
if(stack.peek().equals(minStack.peek())){
minStack.pop();
}
stack.pop();
} public int top() {
return stack.peek();
} public int min() {
if(!minStack.isEmpty()){
return minStack.peek();
}else{
return stack.peek();
}
}
}

面试题22:栈的压入、弹出序列

import java.util.ArrayList;
import java.util.Stack; public class Solution {
public boolean IsPopOrder(int [] pushA,int [] popA) {
boolean flag = false;
int n = pushA.length;
if(n > 0){
int i=0,j=0;
Stack<Integer> s = new Stack<Integer>();
while(j < n){
while(s.isEmpty() || s.peek()!=popA[j]){
if(i == n) break;
s.push(pushA[i]);
i++;
}
if(s.peek()!=popA[j]){
break;
}
s.pop();
j++;
}
if(s.isEmpty() && j==n){
flag = true;
}
}
return flag;
}
}

面试题23:从上往下打印二叉树

public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> res = new ArrayList<Integer>();
Queue<TreeNode> que = new LinkedList<TreeNode>();
if(root == null) return res;
que.offer(root);
while(!que.isEmpty()){
int levelNum = que.size();
for(int i=0;i<levelNum;i++){
if(que.peek().left != null) que.offer(que.peek().left);
if(que.peek().right!= null) que.offer(que.peek().right);
res.add(que.poll().val);
}
}
return res;
}
}

面试题24:

import java.util.*;
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence == null || sequence.length == 0) return false;
int len = sequence.length;
int rootVal = sequence[len-1];
int i=0;
for(;i<len-1;i++){
if(rootVal < sequence[i]){
break;
}
}
int j=i;
for(;j<len-1;j++){
if(rootVal > sequence[j]){
return false;
}
}
boolean judgeLeft = true;
if(i>0){judgeLeft = VerifySquenceOfBST(getSeq(sequence,0,i-1));}
boolean judgeRight = true;
if(i<len-1){judgeRight = VerifySquenceOfBST(getSeq(sequence,i,len-2));}
return (judgeLeft && judgeRight);
}
public int[] getSeq(int[] seq,int start,int end){
int[] ret = new int[end-start+1];
for(int i=start;i<=end;i++){
ret[i-start] = seq[i];
}
return ret;
}
}

面试题25:二叉树中和为某一值的路径

public class Solution {
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> tmp = new ArrayList<Integer>();
findHelp(res,tmp,root,0,target);
return res;
}
public void findHelp(ArrayList<ArrayList<Integer>> res,ArrayList<Integer> tmp,TreeNode root , int curSum,int target){
if(root == null) return;
curSum += root.val;
ArrayList<Integer> tmpCur = new ArrayList<Integer>(tmp);
tmpCur.add(root.val);
if(root.left == null && root.right==null && curSum == target) {res.add(tmpCur);return;}
else if(curSum > target) {return;}
else if(curSum < target){
findHelp(res,tmpCur,root.left,curSum,target);
findHelp(res,tmpCur,root.right,curSum,target);
}
return;
}
}

面试题26:复杂链表的复制

public class Solution {
public RandomListNode Clone(RandomListNode pHead)
{
if(pHead == null) return null;
RandomListNode p = pHead;
while(p != null){
RandomListNode pClone = new RandomListNode(p.label);
pClone.next = p.next;
pClone.random = null;
p.next = pClone;
p = p.next.next;
}
p = pHead;
while(p != null){
if(p.random != null){
p.next.random = p.random.next;
}
p = p.next.next;
} RandomListNode pCloneHead = new RandomListNode(0);
RandomListNode pCloneNode = new RandomListNode(0);
p = pHead;
if(p != null){
pCloneHead = pCloneNode = p.next;
p.next = pCloneNode.next;
p = p.next;
}
while(p != null){
pCloneNode.next = p.next;
pCloneNode = pCloneNode.next;
p.next = pCloneNode.next;
p = p.next;
}
return pCloneHead;
}
}

面试题27:二叉搜索树与双向链表

public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree == null) return pRootOfTree;
pRootOfTree = convertHelp(pRootOfTree);
while(pRootOfTree.left!=null) pRootOfTree = pRootOfTree.left;
return pRootOfTree;
}
public TreeNode convertHelp(TreeNode root){
if(root == null) return root;
if(root.left != null){
TreeNode left = convertHelp(root.left);
while(left.right!=null) left = left.right;
left.right = root;
root.left = left;
}
if(root.right != null){
TreeNode right = convertHelp(root.right);
while(right.left!=null) right = right.left;
root.right = right;
right.left = root;
}
return root;
}
}

面试题28:字符串的排列

import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> res = new ArrayList<String>();
if(str == null || str.length()>9 || str.length()<=0){
return res;
}
str= str.trim();
char[] arr = str.toCharArray();
permuHelp(arr,0,res);
Collections.sort(res);
return res;
}
public void permuHelp(char[] arr,int start,ArrayList<String> res){
if(arr.length - 1 == start){
res.add(new String(arr));
return;
}
for(int i=start;i<arr.length;i++){
if(i != start && arr[i]==arr[start]) continue;
char tmp = arr[start];
arr[start] = arr[i];
arr[i] = tmp; permuHelp(arr,start+1,res); tmp = arr[start];
arr[start] = arr[i];
arr[i] = tmp;
}
}
}

面试题29:数组中出现次数超过一半的数字

public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
if(array.length == 0) return 0;
int res = array[0];
int cnt = 1;
for(int i=1;i<array.length;i++){
if(res == array[i]){
cnt++;
}else{
cnt--;
} if(cnt == 0){
res = array[i];
cnt = 1;
}
}
cnt = 0;
for(int i=0;i<array.length;i++){
if(array[i] == res){
cnt++;
}
}
if(cnt>array.length/2) return res;
else return 0;
}
}

面试题30:最小的K个数

import java.util.PriorityQueue;
import java.util.Comparator;
import java.util.ArrayList;
import java.util.Queue;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> res = new ArrayList<Integer>();
if(input.length==0 || k>input.length || k==0) return res;
Comparator<Integer> com = new Comparator<Integer>(){
public int compare(Integer a , Integer b){
if(a>b) {return 1;}
else if(a<b) {return -1;}
else {return 0;}
}
};
Queue<Integer> pq = new PriorityQueue<Integer>(input.length,com);
for(int i=0;i<input.length;i++){
pq.add(input[i]);
}
for(int i=0;i<k;i++){
res.add(pq.poll());
}
return res;
}
}

剑指offer题目21-30的更多相关文章

  1. 【剑指Offer】剑指offer题目汇总

      本文为<剑指Offer>刷题笔记的总结篇,花了两个多月的时间,将牛客网上<剑指Offer>的66道题刷了一遍,以博客的形式整理了一遍,这66道题属于相对基础的算法题目,对于 ...

  2. 代码题 — 剑指offer题目、总结

    剑指offer题目总结:  https://www.cnblogs.com/dingxiaoqiang/category/1117681.html 版权归作者所有,任何形式转载请联系作者.作者:马孔多 ...

  3. 剑指offer题目系列三(链表相关题目)

    本篇延续上一篇剑指offer题目系列二,介绍<剑指offer>第二版中的四个题目:O(1)时间内删除链表结点.链表中倒数第k个结点.反转链表.合并两个排序的链表.同样,这些题目并非严格按照 ...

  4. 再来五道剑指offer题目

    再来五道剑指offer题目 6.旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4, ...

  5. 剑指 Offer 题目汇总索引

    剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格              ...

  6. 牛客网上的剑指offer题目

    题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一 ...

  7. 剑指offer题目java实现

    Problem2:实现Singleton模式 题目描述:设计一个类,我们只能生成该类的一个实例 package Problem2; public class SingletonClass { /* * ...

  8. 剑指offer题目系列一

    本篇介绍<剑指offer>第二版中的四个题目:找出数组中重复的数字.二维数组中的查找.替换字符串中的空格.计算斐波那契数列第n项. 这些题目并非严格按照书中的顺序展示的,而是按自己学习的顺 ...

  9. 剑指offer题目系列二

    本篇延续上一篇,介绍<剑指offer>第二版中的四个题目:从尾到头打印链表.用两个栈实现队列.旋转数组的最小数字.二进制中1的个数. 5.从尾到头打印链表 题目:输入一个链表的头结点,从尾 ...

  10. 剑指offer题目解答合集(C++版)

    数组中重复的数字 二维数组中查找 字符串 替换空格 二叉树的编码和解码 从尾到头打印链表 重建二叉树 二叉树的下一个节点 2个栈实现队列 斐波那契数列 旋转数字 矩阵中的路径 机器人的运动范围 剪绳子 ...

随机推荐

  1. ios device model 详细内容

    参考 这里:https://theiphonewiki.com/wiki/Models http://en.wikipedia.org/wiki/List_of_iOS_devices http:// ...

  2. 【AT91SAM3S】建立基于SAM3S库的工程并点亮LED

    习惯了ST的库,猛然间看到ATMEL的库,有点无从下手.这几天参考这示例工程,终于建立了一个使用ATMEl库的工程. 软件库版本: 软件平台:MDK470A 硬件平台:英蓓特 EB-SAM3S MCU ...

  3. [jQuery]html(),text(),val()方法的区别

    1.HTML html():取得第一个匹配元素的html内容.这个函数不能用于XML文档.但可以用于XHTML文档 html(val):设置每一个匹配元素的html内容.这个函数不能用于XML文档.但 ...

  4. Android广播机制简介

    为什么说Android中的广播机制更加灵活呢?这是因为Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广播可能是来自于系统的,也可能是来 ...

  5. PHP截断函数mb_substr()详细介绍

    [导读] 在php中mb_substr()函数是用来截中文与英文的函数,可以方便快速的解决截取指定字符长度的问题,下面我来给大家介绍介绍.提示:mb_substr在于php中是默认不被支持的我们需要在 ...

  6. CRM Xrm.Page 的对象层次结构

  7. Python基础篇【第2篇】: Python内置函数(一)

    Python内置函数 lambda lambda表达式相当于函数体为单个return语句的普通函数的匿名函数.请注意,lambda语法并没有使用return关键字.开发者可以在任何可以使用函数引用的位 ...

  8. 51. Word Search

    Word Search Given a 2D board and a word, find if the word exists in the grid. The word can be constr ...

  9. BMP图片格式

    BMP图片 BMP采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大.BMP文件的图像深度可选lbit.4bit.8bit及24bit和32bit.BMP文 ...

  10. VBA_Excel_教程:变量,数组

    Sub testVar() '变量 Dim strT1 As String strT1 = "A" '常量[加不加类型都可以] Const strT2 As String = &q ...