编程之美
jxfang7788
#非宁静无以致远-_-||
展开
-
N的阶乘中(N!)末尾0的个数
问题1:N!中末尾0的个数?。。思路1:N!=K x 10^M,且K不能被10整除,那么N!末尾有M个0.思路2: 进行因数分解,N!=(2^x)x(3^y)x(5^z)...,由于10=2x5,所以0的个数M只跟x和z有关,且M=min(x,z),因为能被2整除的数出现的频率比能被5整除的数高得多,所以x>z,所以M=z。解法1:#includeint main(){原创 2015-08-04 19:38:17 · 1174 阅读 · 0 评论 -
将浮点数用分数表示
用float和double来存储小数是得不到精确值的,但无论是有限小数还是无限循环小数,可以用分数来表示小数的精确值。注意:无限不循环小数不可以。问题:给定一个有限小数或者无限循环小数,输出该小数的分数形式。 所有小数都能划分为整数部分和小数部分,这里我们只考虑小数部分,即大于0,小于1之间的数。对于有限小数xx,假设为0.a1a2a3...an0.a_1a_2a_3...a_n,xx可变形为a1原创 2017-11-28 16:54:41 · 3976 阅读 · 0 评论 -
字符串移位包含的问题
问题:给定字符串s和t,判断是否字符串t能通过将s移位后的字符串所包含。方法一 最简单的方法就是将s进行循环移位,再判断移位后的字符串是否包含字符串t,代码如下:#include <iostream>#include <string.h>#include <math.h>using namespace std;bool isSubstr(string s, string t){原创 2017-11-29 10:00:24 · 338 阅读 · 0 评论 -
计算字符串的相似度
编辑距离: Edit Distance,又称Levenshtein距离,是指一个字符串经过增加、删除、修改后操作转变成另一个字符串所需要的最小操作次数。 相似度:等于“编辑距离+1”的倒数。所以编辑距离越小,相似度越大。如s1 = “abc”,s2 = “ab”,其编辑距离为1,相似度为1/(1+1) = 0.5问题:给定两个字符串,计算其相似度解决方法:利用动态规划,先计算两个字符串的编辑距离,原创 2017-11-29 10:57:37 · 1216 阅读 · 0 评论 -
二叉树的直径,即二叉树的节点之间最大距离
问题:如题,求解树的直径,即树中两个节点的最长路径距离,该路径可能经过根节点,也可能不经过根节点该题也是leetcode上的题,代码如下。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; *原创 2017-11-29 13:58:24 · 481 阅读 · 0 评论 -
2.3 寻找发帖"水王"
问题一:有一个发帖数目最多的超级水王,其发帖数目超过帖子总数的一半,如果现在有一个论坛所有发帖的列表,找出这个水王方法一 最直接的的方法就是先排序,因为超级水王发帖数目超过一半,那么ID列表中的第N/2项就是超级水王的ID号,即ID[N/2]。时间是复杂为O(NlogN) + O(1)。方法二 为避免排序,降低时间复杂度,如果每次删除两个不同的ID号,不论有没有包含超级水王的ID,剩下的ID原创 2017-11-28 13:18:27 · 263 阅读 · 0 评论 -
2.4 1的数目
问题:输入一个正整数N,求1到N之间的所有整数中所出现的1的个数。 举例来说: N为3,1、2、3中只有一个1存在; N为12,1、2、3、4、5、6、7、8、9、10、11、12中有五个1存在方法一 最简单的方法就是遍历1到N,求出每个数中含有的”1”的个数,再相加,就得到了所求。方法二 假设N为一个四位数abcd,a、b、c、d分别是N的各个数位上的数字。假设我们要求百位上回出现的原创 2017-11-28 14:03:19 · 275 阅读 · 0 评论