2012年3月18日

求1-n直接1出现的次数

摘要: 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。分析:这是一道广为流传的google面试题。用最直观的方法求解并不是很难,但遗憾的是效率不是很高;而要得出一个效率较高的算法,需要比较强的分析能力,并不是件很容易的事情。当然,google的面试题中简单的也没有几道。首先我们来看最直观的方法,分别求得1到n中每个整数中1出现的次数。而求一个整数的十进制表示中1出现的次数,就和本面试题系列的第22题很相像了。我们每次判断整数的个位数字是不是1。如果这个数字大于10,除以10之后再判断个位数字 阅读全文

posted @ 2012-03-18 17:49 c语言源码 阅读(562) 评论(0) 推荐(0) 编辑

为什么要工作?

摘要: 很多时候我常常在反思,我为什么工作? 背井离乡,离家数千里;上班是起早贪黑,有时候如果在公司就餐和午休,那就达到了白天见不到太阳的境界。这是为什么呢?是为了钱?好像也不是,工资也不是很高;为了生存?貌似也不是,我是村儿里人,钱没有,但是不可能没饭吃,因为家家都有土地,如果我去种地,那这辈子衣食肯定是无忧的。不知道原因,只好用一下反证法问自己,假如我目前不工作了会怎么样? 结合自身的资源结论如下: 1、回家当农民,与土地,牛羊等打交道。生活怡然自得,可是钱不多。大家会认为读书无用,读了二十几年的书,结果种地。——不被尊重 2、既然种地,那么也就没有闲情玩电脑、上网、看新闻、看八卦、关注国际形势. 阅读全文

posted @ 2012-03-18 16:27 c语言源码 阅读(169) 评论(0) 推荐(0) 编辑

寻找丑数

摘要: 题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。分析:这是一道在网络上广为流传的面试题,据说google曾经采用过这道题。所谓一个数m是另一个数n的因子,是指n能被m整除,也就是n % m == 0。根据丑数的定义,丑数只能被2、3和5整除。也就是说如果一个数如果它能被2整除,我们把它连续除以2;如果能被3整除,就连续除以3;如果能被5整除,就除以连续5。如果最后我们得到的是1,那么这个数就是丑数,否则不是。基于前面的分析,我们可以写出如下的函数来判断 阅读全文

posted @ 2012-03-18 16:11 c语言源码 阅读(4354) 评论(0) 推荐(1) 编辑

八皇后问题

摘要: package quess;/*** 由于八个皇后的任意两个不能处在同一行,那么这肯定是每一个皇后占据一行。* 于是我们可以定义一个数组ColumnIndex[8],数组中第i个数字表示位于第i行的皇后的列号。* 先把ColumnIndex的八个数字分别用0-7初始化,接下来我们要做的事情就是对数组ColumnIndex做全排列。* 由于我们是用不同的数字初始化数组中的数字,因此任意两个皇后肯定不同列。* 我们只需要判断得到的每一个排列对应的八个皇后是不是在同一对角斜线上,* 也就是数组的两个下标i和j,是不是i-j==ColumnIndex[i]-Column[j]或者j-i==Column 阅读全文

posted @ 2012-03-18 13:43 c语言源码 阅读(287) 评论(0) 推荐(0) 编辑

时间复杂度为O(n)的排序

摘要: 题目:某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。分析:排序是面试时经常被提及的一类题目,我们也熟悉其中很多种算法,诸如插入排序、归并排序、冒泡排序,快速排序等等。这些排序的算法,要么是O(n2)的,要么是O(nlogn)的。可是这道题竟然要求是O(n)的,这里面到底有什么玄机呢?题目特别强调是对一个公司的员工的年龄作排序。员工的数目虽然有几万人,但这几万员工的年龄却只有几十种可能。上班早的人一般也要等到将近二十岁才上班,一般人再晚到了六七十岁也不得不退休。由于年龄总共只有几十种可能,我们可以很方便地统计出每一个年龄里有多少名员工 阅读全文

posted @ 2012-03-18 11:17 c语言源码 阅读(936) 评论(0) 推荐(0) 编辑

导航