- 博客(14)
- 收藏
- 关注
原创 顺时针打印矩阵 (JAVA实现)
问题:给定一个矩阵,从外向内顺时针打印矩阵中的每一个数字。例如:给定矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16输出应该为:{1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10}分析:问题的本质其实就是打印一
2012-07-28 05:55:42 4973
原创 给你一串股票价格,找出买点和卖点,使得利润最大
问题:Given array of integers representing historic stock prices. Find the buying and selling points to maximize the profit. 给你一个整数数组,数组的值代表股票的历史价格。找到买点和卖点,使得利润最大。假设数组为array = {3, 8, 1, 2, 19, 22, 2,
2012-07-23 10:38:53 2132
原创 求两个排序数组的并集
问题: 给你两个排序的数组,求两个数组的并集。比如: A = 1 3 4 5 7, B = 2 3 5 8 9, 那么并集就是 1 2 3 4 5 7 8 9.代码:public class Union { public static void main(String[] args) { char[] ch1 = "abcde".toCharArray(); c
2012-07-23 06:37:53 4678
原创 求两个数组的交集
问题: 给你两个排序的数组,求两个数组的交集。 比如: A = 1 3 4 5 7, B = 2 3 5 8 9, 那么交集就是 3 5.分析:因为数组A B均排过序,所以,我们可以用两个“指针”分别指向两个数组的头部,如果其中一个比另一个小,移动小的那个数组的指针;如果相等,那么那个值是在交集里,保存该值,这时,同时移动两个数组的指针。一直这样操作下去,直到有一个指针已经超过
2012-07-23 06:12:51 911
原创 一道收集优惠券的面试题
问题:一个饭店发行一套优惠券,一套里面总共有 n 张不同的优惠券,顾客每次吃一次,可以随机获得一张优惠券。如果收集齐一套,下次吃饭可以打折。请问:顾客要来多少次才能收集齐一套优惠券?(是不是和小时候吃零食收集刮刮卡的情形是一样的,呵呵)分析:问题的难点在于顾客获得的优惠劵可能会有重复。但是,我们可以换一角度思考。假设顾客第一次来,他一定会得到一张独一无二的优惠券,第二次来的
2012-07-23 06:07:28 2545
原创 名人问题 (Celebrity problem)
问题:在一个房间里有 N 个人,其中一个是名人,所谓名人就是大家都认识他,但是他不认识任何人。其它人可能认识房间里面另外的一部分人。你可以问任何人问题,但是问题只能是:你认识 X 吗,对方回答 Yes or No. 请问最少要问多少个问题才能把名人找出来?分析:我们把人编号,比如从1 到 N。 我们考虑最坏情况:你问每一个人是否认识 X ,如果大家都认识,那么 X 一定是
2012-07-23 06:06:16 1012
原创 找出字符串中对称的子字符串的最大长度(最长回文)
背景:所谓对称子字符串,就是这个子字符串要么是以其中一个词对称:比如 “aba”, “abcba”;要么就完全对称:比如"abba", "abccba"。问题:给你一个字符串,找出该字符串中对称的子字符串的最大长度。思路:首先,我们用字符数组 char[] array 来保持这个字符串,假设现在已经遍历到第 i 个字符,要找出以该字符为“中心”的最长对称字符串,我们需要用另两个
2012-07-20 23:51:40 3994
原创 判断一个数字是否是回文
问题:给一个数字,判断该数字是否是回文。比如 1221是回文,而123不是。分析:判断一个数字是否是回文,我们可以先把它转成字符串,然后根据回文“对称”的特性进行判断:查看第 x 个字符是否与第 n - x + 1 字符是否相等 (x 从1开始,n/2 结束, n 是指数字长度)。但是,这道题因为是数字,有一种更好的解法。即根据原始数字,通过数学方法构建出它的回文数字,如果原始数字大小
2012-07-20 22:27:33 1056
转载 扩展系统功能——装饰模式
尽管目前房价依旧很高,但还是阻止不了大家对新房的渴望和买房的热情。如果大家买的是毛坯房,无疑还有一项艰巨的任务要面对,那就是装修。对新房进行装修并没有改变房屋用于居住的本质,但它可以让房子变得更漂亮、更温馨、更实用、更能满足居家的需求。在软件设计中,我们也有一种类似新房装修的技术可以对已有对象(新房)的功能进行扩展(装修),以获得更加符合用户需求的对象,使得对象具有更加强大的功能。这种技术对应于一
2012-07-03 07:40:27 3026
转载 请求的链式处理——职责链模式
“一对二”,“过”,“过”……这声音熟悉吗?你会想到什么?对!纸牌。在类似“斗地主”这样的纸牌游戏中,某人出牌给他的下家,下家看看手中的牌,如果要不起上家的牌则将出牌请求再转发给他的下家,其下家再进行判断。一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新的牌。在这个过程中,牌作为一个请求沿着一条链在传递,每一位纸牌的玩家都可以处理该请求。在设计模式中,我们也有一种专门用于处理这种请求
2012-07-03 01:58:46 1877
转载 确保对象的唯一性——单例模式
前言:这是一篇我见过的讲单例模式最完整的,也是讲的最好的一篇博客文章。3. 1 单例模式的动机 对于一个软件系统的某些类而言,我们无须创建多个实例。举个大家都熟知的例子——Windows任务管理器,如图3-1所示,我们可以做一个这样的尝试,在Windows的“任务栏”的右键弹出菜单上多次点击“启动任务管理器”,看能否打开多个任务管理器窗口?如果你的桌面出现多个
2012-07-02 23:13:33 5938 3
原创 ZigZag打印二叉树
问题:给定二叉树,ZigZag打印每一层的节点,如果上一层是从左到右,下一层就是从右到左。分析:本题和分层打印二叉树是一样的,我们只需要判断上一层的顺序,就可以判断该层的顺序。代码:public static void printZigZag(Node node) { ArrayList list1 = new ArrayList(); ArrayList
2012-07-01 12:06:52 1958
原创 短址(short URL)原理及其实现
前言:最近看了一些关于短址(short URL)方面的一些博客,有些博客说到一些好的东西,但是,也不是很全,所以,这篇博客算是对其它博客的一个总结吧。介绍:短址,顾名思义,就是把长的 URL 转成短的 URL, 现在提供这种服务的有很多公司,我们以google家的 URL shortener 服务: http://goo.gl/ 为例。首先我们到 http://goo.gl
2012-07-01 08:34:12 6542 1
原创 打印二叉树的边缘节点
问题:给你一个complete 二叉树,逆时针打印所有边缘节点, 比如:那么,逆时针打印边缘节点后,输出:1 , 3, 5, 9, 8, 6 .分析:如果想写一个方法实现这个要求是很难的,但是,我们可以考虑分步实现。第一步:打印左边的边缘节点;第二步:打印底部所有节点;第三步:打印右边所有边缘节点。代码如下:public static
2012-07-01 01:01:47 1994
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人