上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 19 下一页
摘要: 【试题描述】定义一个函数,输入判断一个树是否是另一个对的子树You have two very large binary trees: T1, with millions of nodes, and T2, with hun-dreds of nodes Create an algorithm to decide if T2 is a subtree of T1Note that the problem here specifies that T1 has millions of nodes—this means that we should be careful of how much sp 阅读全文
posted @ 2013-04-11 20:24 曾先森在努力 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 【试题描述】定义一个函数,输入一个链表,删除无序链表中重复的节点【参考代码】方法一:Without a buffer, we can iterate with two pointers: “current” does a normal iteration, while“runner” iterates through all prior nodes to check for dups Runner will only see one dupper node, because if there were multiple duplicates they would have been remov 阅读全文
posted @ 2013-04-11 20:19 曾先森在努力 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 【试题描述】定义一个函数,输入一个链表,判断链表是否存在环路平衡二叉树,又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的绝对值不超过1。问题:判断一个二叉排序树是否是平衡二叉树这里是二叉排序树的定义解决方案:根据平衡二叉树的定义,如果任意节点的左右子树的深度相差不超过1,那这棵树就是平衡二叉树。首先编写一个计算二叉树深度的函数,利用递归实现。【参考代码】方法一: 1 //返回树的最大深度 2 public static int Depth(Node root) 3 { 4 if (... 阅读全文
posted @ 2013-04-11 20:05 曾先森在努力 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 【试题描述】定义一个函数,输入一个链表,判断链表是否存在环路,并找出回路起点Circular linked list: A (corrupt) linked list in which a node’s next pointer points to an earlier node, so as to make a loop in the linked listEXAMPLEInput: A -> B -> C -> D -> E -> C [the same C as earlier]Output: CIf we move two pointers, one wi 阅读全文
posted @ 2013-04-11 19:53 曾先森在努力 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 【试题描述】定义一个函数,字符串转数组数组转字符串【参考代码】 1 public static int strToInt(String str) 2 { 3 int i = 0, num = 0; 4 char[] strTemp = str.toCharArray(); 5 boolean isNeg = false; 6 int len = str.length(); 7 8 if (strTemp[0] == '-') 9 {10 isNeg = tr... 阅读全文
posted @ 2013-04-11 19:50 曾先森在努力 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 【试题描述】定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点【参考代码】方法一: 1 public static Link reverseLinkList(Link head) 2 { 3 if (head == null || head.next == null) 4 return head; 5 6 Link pre = null; 7 Link cur = head; 8 Link back = head.next; 9 10 while (ba... 阅读全文
posted @ 2013-04-11 19:46 曾先森在努力 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 【试题描述】求二叉树中任意两个节点的最近公共祖先也称为LCA问题(Lowest Common Ancestor)。二叉查找树如果该二叉树是二叉查找树,那么求解LCA十分简单。基本思想为:从树根开始,该节点的值为t,如果t大于t1和t2,说明t1和t2都位于t的左侧,所以它们的共同祖先必定在t的左子树中,从t.left开始搜索;如果t小于t1和t2,说明t1和t2都位于t的右侧,那么从t.right开始搜索;如果t1 right) { 7 int temp = left; 8 left = right; 9 right = temp;10 ... 阅读全文
posted @ 2013-04-11 19:33 曾先森在努力 阅读(433) 评论(0) 推荐(0) 编辑
摘要: 【试题描述】输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中。思路:同样是用递归求解。可以考虑求长度为n的字符串中m个字符的组合,设为C(n,m)。原问题的解即为C(n, 1), C(n, 2),...C(n, n)的总和。对于求C(n, m),从第一个字符开始扫描,每个字符有两种情况,要么被选中,要么不被选中,如果被选中,递归求解C(n-1, m-1)。如果未被选中,递归求解C(n-1, m)。不管哪种方式,n的值都会减少,递. 阅读全文
posted @ 2013-04-11 17:13 曾先森在努力 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 如何理解递归,写出正确的递归程序,我觉得有几个关键点:1.要从整体把握问题递归的难点在于人脑并不适合去跟踪递归中自己调用自己的这个过程,这是因为人脑中不像计算机一样有一个可以记忆的堆栈,但是不同的是人是会归纳的,而计算机只知道调用-返回。因此,理解和设计递归,一定要从整体把握,数学归纳法和递归是一个对称的关系,数学归纳法不断的扩展自己,递归则是不断的分解自己。递归中的递就是把主问题分解成子问题,归就是利用子问题的解逐步向上求解的过程了。关键点是要善用数学归纳法里面的假设,就是假设子问题已经求解了,它得到的结果是什么,一旦这么想就是在从整体上把握问题,不必再去纠结细节。设计一个递归函数的时候,首 阅读全文
posted @ 2013-04-10 16:13 曾先森在努力 阅读(1802) 评论(0) 推荐(1) 编辑
摘要: 【试题描述】输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab,cba。分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中。我们以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc的排列。当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac,接着我们固定第一个字符b,求后面两个字符ac的排列。现在是把c放到第一位置的时候了。记住前面我们已经把原先的第一个字符a和后面的b做了交换,为了保证这 阅读全文
posted @ 2013-04-09 22:13 曾先森在努力 阅读(295) 评论(0) 推荐(1) 编辑
摘要: 【试题描述】 You are given a binary tree in which each node contains a value. Design an algorithm to print all paths which sum up to that value. Note that it can be any path in the tree-it does not have to start at the root. 输入一个整数和一棵二元树。从树的任意结点开始往下访问所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。解题思路: 一层一层的遍历,保存当前节点到根节 阅读全文
posted @ 2013-04-09 20:09 曾先森在努力 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 【试题描述】输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数 22 和如下二元树 10 / \ 5 12 / \ 4 7则打印出两条路径:10, 12 和 10, 5, 7。据说这是百度的一道笔试题。分析:这道题考查对二叉树遍历方式的理解,采用后序遍历,如果把二叉树看成图,就是图的深度遍历。使用变量存放当前遍历的路径和,当访问到某一结点时,把该结点添加到路径上,并累加当前结点的值。如果当前结点为叶结点并且当前路径的和刚好等于... 阅读全文
posted @ 2013-04-09 19:08 曾先森在努力 阅读(1045) 评论(0) 推荐(0) 编辑
摘要: 【试题描述】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。【试题分析】时间复杂度O(n),空间复杂度O(1) 思路1: 创建一个hash_map,key为数组中的数,value为此数出现的次数。遍历一遍数组,用hash_map统计每个数出现的次数,并用两个值存储目前出现次数最多的数和对应出现的次数。 这样可以做到O(n)的时间复杂度和O(n)的空间复杂度,满足题目的要求。 但是没有利用“一个数出现的次数超过了一半”这个特点。也许算法还有提高的空间。 思路2: 使用两个变量A和B,其中A存储某个数组中的数,B用来计数。开始时将B初始化为0。 遍历... 阅读全文
posted @ 2013-04-09 17:08 曾先森在努力 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 【试题描述】输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度O(n)。思路:当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和。【参考代码】 1 public static int maxSum(int[] a) { 2 int sum = 0; 3 int b = 0; 4 for (int i = 0; i 0 *这个公式的意义: * 当以第(... 阅读全文
posted @ 2013-04-09 16:52 曾先森在努力 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 【试题描述】我们把只包含因子2、3和5的数称作丑数。求按从到大的顺序的第1500个丑数。例如6,8是丑数,而14不是,因为它包含因子7.习惯上把1当作第一个丑数。 根据丑数的定义,丑数应该是另一个丑数乘以2、3或者5的结果(1除外)。因此我们可以创建一个数组,里面的数字是排好序的丑数。里面的每一个丑数是前面的丑数乘以2、3或者5得到的。那关键就是确保数组里的丑数是有序的了。我们假设数组中已经有若干个丑数,排好序后存在数组中。 接下来我们换一种思路来分析这个问题,试图只计算丑数,而不在非丑数的整数上花费时间。根据丑数的定义,丑数应该是另一个丑数乘以2、3或者5的结果(1除外)。因此我们可以创建一 阅读全文
posted @ 2013-04-09 16:19 曾先森在努力 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 【试题描述】写一个函数,求两个整数的和,要求在函数体内不得使用加减乘除四则运算符合。基本思路是这样的:int A, B;A&B //看哪几位有进位A^B //不带进位加考虑二进制加法的过程,步骤一、A^B,能够得到没有进位的加法。步骤二、A&B,能够得到相加之后,能够进位的位置的信息。向左移动一位,就是两个二进制数相加之后的进位信息。所以,(A&B)<<1就是两个二进制数相加得到的“进位结果”。步骤三、将前两步的结果相加。相加的过程就是步骤一和步骤二,直到不再产生进位为止。【参考代码】 1 public static int func2(int a, int 阅读全文
posted @ 2013-04-09 15:51 曾先森在努力 阅读(418) 评论(0) 推荐(0) 编辑
摘要: 进程是什么?程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的。有了进程为什么还要线程?进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率。很多人就不理解了,既然进 阅读全文
posted @ 2013-04-09 15:01 曾先森在努力 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 称球问题一般会有以下3种变形: 1、N个球,其中有一个坏的,知道是轻还是重,用天平称出坏球来。 2、N个球,其中有一个坏的,不知是轻还是重,用天平称出坏球来。 3、N个球,其中有一个坏的,不知是轻还是重,用天平称出坏球来,并告知坏球是轻还是重。 对于上面3种情况,称量n次,最多可以在几个球中找出坏球来? 答案:分别为:3^n, (3^n - 1)/2, (3^n - 3)/2. 阅读全文
posted @ 2013-04-06 16:40 曾先森在努力 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 概念:在Java应用程序中,一个类Class只有一个实例存在.单例模式属于对象创建型模式,其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点。对一些类来说,只有一个实例是很重要的,虽然系统中可以有许多打印机,但却只应该有一个打印机假脱机,只应该有一个文件系统和一个窗口管理器,一个数字滤波器只能有一个A/D转换器,一个会计系统只能专用于一个公司。怎样才能保证一个类只有一个实例并且这个实例易于被访问,一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象,一个更好的方法是让类自身负责保存他的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法,这就 阅读全文
posted @ 2013-04-04 20:34 曾先森在努力 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 内存泄露是指系统中存在无法回收的内存,有时候会造成内存不足或系统崩溃。虽然Java存在内存泄露,但是基本上不用很关心它,非凡是那些对代码本身就不讲究的就更不要去关心这个了。Java中的内存泄露当然是指:存在无用但是垃圾回收器无法回收的对象。而且即使有内存泄露问题存在,也不一定会表现出来。Java是如何管理内存 为了判断Java中是否有内存泄露,我们首先必须了解Java是如何管理内存的。Java的内存管理就是对象的分配和释放问题。在Java中,程序员需要通过关键字new为每个对象申请内存空间 (基本类型除外),所有的对象都在堆 (Heap)中分配空间。另外,对象的释放是由GC决定和执行的。在J. 阅读全文
posted @ 2013-04-03 07:39 曾先森在努力 阅读(742) 评论(0) 推荐(0) 编辑
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 19 下一页