自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 Q35、(矩阵)

求一个矩阵中最大的二维矩阵(元素和最大).如:1 2 0 3 42 3 4 5 11 1 5 3 0中最大的是:4 55 3要求:(1)写出算法;(2)分析时间复杂度;(3)用 C 写出关键代码思路:自己没想到好的方法..在网上找到的都是时间复杂度是O(m*n)的算法..也就是遍历整个矩阵..这个感觉有点小不爽..public class Q

2013-06-07 15:55:31 468

原创 Q34、(队列)

实现一个队列。队列的应用场景为:一个生产者线程将 int 类型的数入列,一个消费者线程将 int 类型的数出列思路:多线程...public class Q34 { public static Queue queue = new LinkedList(); public static void main(String[] args) throws Exception

2013-06-07 15:49:06 613

原创 Q33、(字符串)

实现一个挺高级的字符匹配算法:给一串很长字符串,要求找到符合要求的字符串,例如目的串:1231******3***2 ,12*****3 这些都要找出来其实就是类似一些和谐系统。。。。。思路:现在只有一个有问题的思想:源串:21362两个指针head和tail,head在后,tail在前如果head~tail之间的子字符串包含这些和谐系统,比如head=0,

2013-06-07 15:37:20 681

原创 Q32、(数组、规划)

有两个序列 a,b,大小都为 n,序列元素的值任意整数,无序;要求:通过交换 a,b 中的元素,使[序列 a 元素的和]与[序列 b 元素的和]之间的差最小。例如: var a=[100,99,98,1,2,3];var b=[1,2,3,4,5,40];思路:假设序列a和b的和分别为sumA和sumB,假设sumA>sumB。交换a中的x和b中的y,交

2013-06-07 12:03:28 470

原创 Q30、在从 1 到 n 的正数中 1 出现的次数(数组)

题目:输入一个整数 n,求从 1 到 n 这 n 个整数的十进制表示中 1 出现的次数。例如输入 12,从 1 到 12 这些整数中包含 1  的数字有 1, 10, 1 1 和 12, 1 一共出现了 5 次。编程之美原题.....

2013-06-07 10:27:39 769

原创 Q29、栈的 push、pop 序列(栈)

题目:输入两个整数序列。其中一个序列表示栈的 push 顺序,判断另一个序列有没有可能是对应的 pop 顺序。为了简单起见,我们假设 push 序列的任意两个整数都是不相等的。 比如输入的 push 序列是 1、2、3、4、5,那么 4、5、3、2、1 就有可能是一个 pop 系列。因为可以有如下的 push 和 pop 序列:push 1,push 2,push 3,push

2013-06-05 18:14:04 683

原创 Q28、整数的二进制表示中 1 的个数(运算)

题目:输入一个整数,求该整数的二进制表达中有多少个 1。例如输入 10,由于其二进制表示为 1010,有两个 1,因此输出 2。思路:编程之美原题..m&(m-1),每次与操作都会消减二进制中的一个1。假设m=5,二进制表示为101m&m-1:   101       &100=100public class Q28 { public static

2013-06-05 10:52:19 649

原创 No27、跳台阶问题(递归)

题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。 求总共有多少总跳法,并分析算法的时间复杂度。 这道题最近经常出现,包括MicroStrategy等比较重视算法的公司 都曾先后选用过个这道题作为面试题或者笔试题。 解题思路: 经典的青蛙跳台阶.....第一次看到果断被干掉了....后来在网上看了一下..这尼玛就是斐波那契数列....疯了... 假设f

2013-03-18 22:04:01 621

原创 Q26、左旋转字符串(字符串)

题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。 要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。 解题思路: a b c d e f  左旋转两位 Step1: 前两位字符逆序,得到:b a c d e fStep2:

2013-03-18 21:53:41 400

原创 Q25、(字符串)

写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) 功能: 在字符串中找出连续最长的数字串,并把这个串的长度返回, 并把这个最长数字串付给其中一个函数参数outputstr所指内存。 例如:"abcd12345ed125ss123456789"的首地址传给intputstr 后,函数将返回9, outputs

2013-03-18 21:36:44 397

原创 Q24、(链表):链表操作,单链表就地逆置

题目:链表操作,单链表就地逆置 解题思路:很经典的一个链表算法题..其实需要注意的就是在改变链表的时候一定要维持你需要的指针的相对位置...其实挺简单的... public class Q24 { public static void main(String[] args) { //建立链表 Node head = new Node(1);

2013-03-18 20:07:17 479

原创 Q22、Q23

Q22...智力题..过Q23...没看懂啥意思...以后再看...

2013-03-17 19:37:39 612

原创 No21、(数组)

2010年中兴面试题 编程求解: 输入两个整数  n 和  m,从数列1,2,3.......n 中  随意取几个数, 使其和等于  m ,要求将其中所有的可能组合列出来.  解题思路:乍一看还是挺吓人的...仔细想一下,在任意一个组合中,数列中的每一个数字都只有两种情况,加入组合或者不加入组合..这样我们可以从第一个数字开始递归,第一个数字有两种情况,加入或不加入,然后根

2013-03-14 22:18:32 384

原创 No20、(字符串)

题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数 345。解题思路:1>Java里面的Integer.parseInt,可以看看它对异常情况的处理2>循环相乘第一版代码:public class Q20 { public static void main(String[] args) { Stri

2013-03-14 11:21:59 422

原创 No、18 (数组):需要再看

题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字 0 开始,每次从这个圆圈中删除第 m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第 m 个数字。求出在这个圆圈中剩下的最后一个数字。解题思路:约瑟夫环....好像是研究怎么让非基督徒跳海的方法...1>一个长度为n的数组,初始化为0。

2013-03-14 10:51:57 370

原创 No17、题目:在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b。

题目:在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b。分析:这道题是 2006 年 google 的一道笔试题。解题思路:题目强调了两点:第一、需要记录字符出现的个数....第二、需要记录字符出现的次序..两个长度为24的数组一个存储出现的顺序,一个存储字符出现的个数..记录字符出现顺序的数组索引为顺序,存储的数据是字符-'a';记

2013-03-13 15:46:48 662

原创 Np16、输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。

题目(微软):输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入     8    /   \  6    10 / \     /  \5 7  9  11输出 8 6 10 5 7 9 11。解题思路:编程之美3-10...分层遍历二叉树思想很简单...一个队列,先将根节点入队....然后开始循环当一

2013-03-13 11:09:04 569

原创 No15、输入一颗二元查找树,将该树转换为它的镜像

题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。 例如输入:      8     /   \   6    10  /  \     /  \5   7 9   11输出:      8     /    \  10    6  /  \    /

2013-03-13 10:46:37 520

原创 No14、(数组)

题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是 O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组 1、2、4、7、11、15 和数字 15。由于 4+11=15,因此输出 4 和 11。解题思路:1>取出数组中的所有两个数的组合,求和比较,时间复杂度为O(n*n)for

2013-03-13 10:20:37 461

原创 No13、(链表)

题目:输入一个单向链表,输出该链表中倒数第 k 个结点。链表的倒数第 0 个结点为链表的尾指针。解题思路:1>遍历链表的长度为len,那么倒数第k个节点就是正数的第len-k+1个节点..再遍历一遍即可时间复杂度是O(len)2>两个指针p1,p2,p1指向头结点,p2向后移动k个位置,指向正数第k个位置;然后p1、p2同时向后移动,当p2到达最后一个节点,

2013-03-13 10:02:17 391

原创 No、12 求 1+2+…+n

题目:求 1+2+…+n,要求不能使用乘除法、 for、 while、 if、 else、 switch、 case 等关键字以及条件判断语句(A?B:C)。解题思路:很明显的递归解决,一个典型的尾递归public class Q12 { public static int getNum(int n) { if(n == 0) return 0

2013-03-13 09:44:31 435

原创 No11、求二叉树中节点的最大距离...

如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序,求一棵二叉树中相距最远的两个节点之间的距离。解题思路:对于任意一个节点p,以它为根节点的二叉树中最远的距离是:Max(p->leftNode.height+1+p->rightNode.height+1,maxDistance(p->leftNode),

2013-03-13 09:37:24 509

原创 No10、翻转句子中单词的顺序

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。看着没啥技术含量..注意细节就好,两个指针,每次记录一个单词,在循环中调整正确的指向..public class Q10 { public static void main(St

2013-03-08 16:33:35 385

原创 No9、判断整数序列是不是二元查找树的后序遍历结果

题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回 true,否则返回 false。例如输入 5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8      /     \    6      10  /    \     /    \5     7  9    11因此返回 true。如果输入 7、4、

2013-03-08 15:59:07 465

原创 No7、(链表)

微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。 为了简化问题,我们假设俩个链表均不带环。 问题扩展: 1.如果链表可能有环列? 2.如果需要求出俩个链表相交的第一个节点列? 第一问:假设两个链表不带环,给出两个单向链表的头指针,判断两个链表是否相交1、两个头指针都遍历至最后一个节点,如果两个节点相同,那么两个链

2013-03-08 15:42:15 242

原创 深入理解Java虚拟机读书笔记(二)

Chapter 3:垃圾收集器和内存分配策略每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的....判断对象是否存活的算法:1、引用计数算法:对象中维持一个计数器,当有一个引用指向它,计数器加1;当引用失效的时候,计数器减1;当计数器为0的时候,该对象就可以被jvm回收。但Java中并没有采用这种算法:public class Client{

2013-03-06 19:54:33 241

原创 深入理解java虚拟机读书笔记(一)

Chapter1:走近Javajdk::java程序设计语言,Java虚拟机,Java API。。JRE:java虚拟机,java API的SE子集jdk1.7:dolphinChapter2:Java内存区域与内存溢出异常C/C++语言认为内存分配太重要了,所以需要程序员全部负责内存的分配和回收。优点:内存全部可见,程序员能够很灵活的控制内存的

2013-03-04 15:07:53 272

原创 No6、(数组)

给你 10 分钟时间,根据上排给出十个数,在其下排填出对应的十个数 要求下排每个数都是先前上排那十个数在下排出现的次数。 上排的十个数如下: 【0,1,2,3,4,5,6,7,8,9】举一个例子, 数值: 0,1,2,3,4,5,6,7,8,9 分配: 6,2,1,0,0,0,1,0,0,0 0 在下排出现了 6 次,1 在下排出现了 2 次,  2 在下排

2013-03-01 16:01:58 205

原创 No5、查找最小的 k 个元素(数组)

题目:输入 n 个整数,输出其中最小的 k 个。例如输入 1,2,3,4,5,6,7 和 8 这 8 个数字,则最小的 4 个数字为 1,2,3 和 4。编程之美原题,只不过编程之美上是求n个整数的k个最大的数1、拿到题目第一个想法是排序,排序完了之后再取前K个最小的,这样的时间复杂度是O(n*lgn)+O(k) = O(n*lgn)...当然..这个不行,但是我们可以

2013-03-01 15:55:39 395

原创 No4、在二元树中找出和为某一值的所有路径(树)

题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如  输入整数 22 和如下二元树     10     /     \  5     12  /   \4   7则打印出两条路径:10, 12 和 10, 5, 7。嘛..需要遍历所有的节点才能得到最后的结果,并且父节点需要在子节点之前参加进递归..所以从二叉树

2013-03-01 10:35:55 244

原创 No3、求子数组的最大和(数组)

题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为 O(n)。例如输入的数组为 1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为 3, 10, -4, 7, 2,因此输出为该子数组的和 18。编程之美上面的原题,也是动态规划的一道经典题

2013-02-28 15:07:30 212

原创 No2、设计包含 min 函数的栈(栈)

定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。要求函数 min、push 以及 pop 的时间复杂度都是 O(1)。编程之美上有一道跟这个题比较类似的题目,但那道题是要实现函数 max、push 以及 pop 的时间复杂度都是 O(1)的一个队列,那个队列就是用本题中的栈组织成的。思考如下:首先想到的是在栈中设置一个成员变量为min,保存栈的最

2013-02-28 14:38:22 257

原创 No1、把二元查找树转变成排序的双向链表(树)

题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。     10   /       \ 6       14/    \    /    \4 8 12 16转换成双向链表4=6=8=10=12=14=16。个人想法:看一下转化之后的双向链表的顺序,4、6、8、10、12、14、16,

2013-02-28 10:36:28 272

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除