编程之美
文章平均质量分 56
qingmarch
这个作者很懒,什么都没留下…
展开
-
[编程之美2.1]求二进制数中1的个数
题目:对于一个字节(8bit)的无符号变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能高。 思路一:从十进制转化为二进制的方法中获得启发,可以余2然后判断是否为一,是则加一,再将该数除2继续之前的判断操作。 思路二:将余2和除2操作用位操作&和>>来表示,使得效率更加快 思路三:判断一个数是否为2的幂次可以用v&(v - 1)来求解,比如v = 1000000,则v-1 = 01原创 2013-04-09 11:20:06 · 569 阅读 · 0 评论 -
[编程之美3.9]重建二叉树
假设已经有了前序遍历和中序遍历的结果,希望通过一个算法重建这棵树,并输出后序遍历的结果。原创 2013-04-12 23:02:16 · 431 阅读 · 0 评论 -
[编程之美3.8]求二叉树节点的最大距离
问题描述:如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义“距离”为两个节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点的距离。 分析:原创 2013-04-12 23:00:01 · 467 阅读 · 0 评论 -
[编程之美3.1]字符串移位包含的问题
题目:给定字符串s1和s2,要求判定s2是否能够被s1做循环移位得到的字符串包含。例如给定s1 = AABCD和s2 = CDAA,返回true;给定s1 = ABCD和s2 = ACBD,返回false。 思路一:最直接最暴力的解法就是对字符串循环移位,再进行字符串包含的判断,从而判断所有可能性。 思路二:s1 = AABCD循环包含s2 = CDAA,等价于s3 = s1s1包含s原创 2013-04-11 22:54:21 · 408 阅读 · 0 评论 -
[编程之美2.17]数组循环移位
题目描述:设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量,如abcd1234循环右移三位, 则为 abcd11234 ->4abcd123->34abcd12->234abcd1 思路一:暴力解法,一步步来,每次循环移位一次,移K%N次,此时复杂度为O(N^2)。 思路二:比较巧妙的思路,原创 2013-04-11 23:26:41 · 552 阅读 · 0 评论 -
[编程之美2.4]1的数目
给定一个十进制正整数N,写下从1开始,到N的所有证书,然后数一下其中出现的所有的“1”的个数,例如 N = 2,写下1,2.这样出现了1一个“1”。 N = 12,我们会写下,1,2,3,4,5,6,7,8,9,10,11,12,这样1的个数是5. 题目1.写一个函数f(n),返回1到n之间出现的1的个数,比如f(12) = 5; 题目2.满足f(n)=n的最大的N是多少? 扩展原创 2013-04-10 21:52:22 · 459 阅读 · 0 评论 -
[编程之美2.2]不要被阶乘吓到
题目1.给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如N=10,N!= 3628800,N1的末尾有两个0。 题目2.求N!的二进制表示中最低位1的位置。 解:这题很老了,求0的个数,即为N!=K*10^m,且K不能被10整除,那么N!末尾有m个0,N!=(2^x)*(3^y)*(5^z)···,而这些0是从2*5来的,5的个数又远远小于2,因此m = z,即有z个0,此时,问原创 2013-04-10 21:31:55 · 466 阅读 · 0 评论 -
[编程之美2.14]求子数组之和的最大值
问题描述:一个有N个整数元素的一维数组(A[0]...A[n-1]),这个数组当然有很多子数组,那么子数组之和的最大值是多少呢? 思路一:最直接能想到的方法就是枚举,暴力解法,复杂度为O(N^2)。 思路二:递归解法,将数组分成长度相等的两段数组,分别为A[0],...,A[n/2-1]和A[n/2],...,A[n-1],分别求出最大字段和,原数组的最大字段和为以下三种情况之一: 1:A[原创 2013-04-10 00:30:21 · 530 阅读 · 0 评论 -
[编程之美2.12]快速寻找满足条件的两个数及leetcode的3 sum closest 和 4 sum解析
题目:能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。 例如有如下两个数组:5,6,1,4,7,9,8,给定sum = 10,则这两个数为1和9 思路一:就是枚举,从数组中任意取出两个数字,计算两者之和为给定的数字。其复杂度为O(n^2),这种方法很容易,就是效率不高。 思路二:先排序,对于a[i],则原创 2013-04-09 23:12:34 · 846 阅读 · 0 评论 -
[编程之美3.10]分层遍历二叉树
题目1描述:给定一棵二叉树,要求分层遍历该二叉树,即从上到下按层次访问该二叉树(每层将单独输出一行),每层要求访问的顺序从左到右,并将节点依次编号。正确输出为: ————————————————————————————————————————————————————————————————————————————— 1 2 3 4 5 6 7 8 —————————————————原创 2013-04-12 23:11:14 · 477 阅读 · 0 评论