- 博客(19)
- 资源 (9)
- 收藏
- 关注
原创 面试题19:二叉树镜像
题目:完成一个函数,输入一个二叉树,该函数输入它的镜像思路:递归即可public class MirrorRecursively { public static void mirrorRecursively(Node root){ if(root==null) return; Node temp = root.getLeft(); root.setLeft
2015-08-31 15:14:20 324
原创 面试题18:树的子结构
题目:输入两棵二叉树A,B判断B是不是A的子结构.思路:递归遍历A,找到节点相同点后,再递归查看即可public class HasSubTree { public static boolean hasSubTree(Node p,Node c){ boolean ans = false; if(p!=null && c!=null){ if(p.getDa
2015-08-31 14:47:07 291
原创 面试题17:合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是按照递增排序的思路:递归可解public class Merge { public static Node merge(Node headA,Node headB){ if(headA==null) return headB; else if(headB==null) return
2015-08-31 11:29:38 269
原创 面试题16:翻转链表
题目:定义一个函数,输入一个链表的头结点,反转链表并输出反转后的链表头结点思路:三个指针,pre指向已经完成的链表头结点,middle指向要操作的结点,next指向没操作的节点public class ReverseList { public static Node reverseList(Node head){ if(head==null) return nul
2015-08-31 11:12:43 288
原创 面试题15:链表中倒数第K个节点
题目:输入一个链表,输出该链表倒数第K个节点的值思路:两个指针扫一遍就行了public class FindKthToTail { public static void main(String[] args) { Node[] nodes = new Node[10]; for(int i=0;i<10;i++){ nodes[i] = new Node(i);
2015-08-31 10:22:50 210
原创 面试题14:调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数调整该数组中的数字的顺序,使得所有奇数位于数组的前半部门,偶数位于后半部门思路:类似快排的思路public class ReorderOddEven { public static void main(String[] args) { int[] a ={1,2,3,4,5,6,7,8}; reorderOddEven(a); Sys
2015-08-31 09:54:49 315
原创 面试题13:在O(1)时间删除链表节点
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点.public class DeleteNode { /* * 要求时间复杂度O(1),只要被删除节点不是最后一个都可以O(1) * 如果是最后一个,并且链表中不止一个节点,依旧需要O(n)的复杂度、 * 但是整体是O(1) * 这里头结点是无意义的. */ public s
2015-08-31 09:40:10 381
原创 面试题12:打印1到最大的n位数
题目:输入一个数字m,按顺序打印从1到最大的n位十进制.思路:打印就行了,考虑大数问题,可以用字符数组模拟加法,也可以使用全排列解法1:字符数组模拟加法public class PrintToMaxOfNDight_1 { public static void print_1(int n){ if(n<0){ return; } char[] toP
2015-08-30 20:40:43 308
原创 面试题11:数值的整数次方
题目:实现函数double Power(double base,int exponent)求base得exponent次方分析:正常算,考虑负数情况.public class Power { public static double power(double base,int exponent){ double result = 1; if(exponent>0){
2015-08-30 20:13:57 271
原创 面试题10:二进制中1的个数
题目:请实现一个函数,输入一个整数,输出该数二进制补码表示中1的个数分析:位运算,扫一遍二进制字符串两种都可以public class NumberOf1 { public static void main(String[] args) { System.out.println(numberOf1_1(9)); System.out.println(numberOf1_
2015-08-30 19:52:37 240
原创 面试题9:斐波那契数列
题目:对一个函数n,求斐波那契数列的第n项.思路:直接递归重复计算很多,直接循环就可以解public class Fibonacci { public static void main(String[] args) { for(int i=0;i<50;i++) System.out.println(fibonacci(i)); } public static lo
2015-08-30 19:37:11 299
原创 面试题8:旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的尾部,我们称之为数组的旋转,输入一个递增排序的数组的旋转,输出旋转数组的最小元素思路:直接扫一遍O(n) 利用二分搜索的思想O(logn)->这种搜索对特例要特殊处理public class GetMin { public static void main(String[] args) { int[]a ={1,0,1,1,
2015-08-30 19:29:27 227
原创 面试题7:用两个栈实现队列
题目:用两个栈实现一个队列.实现两个函数:appendTail和deleteHead思路:画图分析一下即可import java.util.Stack;public class Stack2Queue { private Stack s1; private Stack s2; private int size; public Stack2Queue() {
2015-08-30 16:31:59 288
原创 面试题6:重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.思路:递归即可public class BuildTree { public static void main(String[] args) { int[] first = {1,2,4,7,3,5,6,8}; int[] middle = {4,7,2,1,5,3,8,6}; Node root =
2015-08-30 16:22:33 283
原创 面试题5:从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个节点分析:利用栈即可解决import java.util.Stack;public class ReverseLinkedList { public static void main(String[] args) { Node[] nodes = new Node[10]; for(int i=0;i<10;i
2015-08-30 15:56:34 302
原创 面试题4:替换空格
题目:实现一个函数,把字符串中的每个空格替换成"%20"public class ReplaceBlank { public static void main(String[] args) { System.out.println(toAns("We are Happy")); System.out.println(toAns("We are Hap ")); Sys
2015-08-30 15:48:05 301
原创 面试题3:二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样一个数组和一个整数,判断数组中是否含有该整数public class Find { public static void main(String[] args) { int[][] a = new int[][]{ {1,2,8,9}, {
2015-08-30 15:37:49 380
原创 面试题2:实现一个Singleton模式
public class Singleton { //内部持有Singleton唯一引用 private static Singleton instance; //构造器私有化,防止外部new对象 private Singleton(){} //利用锁加双重判断生成单例对象实例,并返回 public static Singleton getInstance(){ if
2015-08-30 15:21:01 387
原创 深入了解Java虚拟机读书笔记(一)JVM内存区域
一.运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机的进程启动而存在,有的区域则是依赖用户线程的启动和结束的建立和销毁. 二.具体分析2.1 程序计数器程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里,字
2015-08-30 15:08:21 520
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人