算法
shayne000
这个作者很懒,什么都没留下…
展开
-
1~n整数中1出现的次数(基于每一位出现次数求和解法)
算法题目: 输入一个整数n, 求1 ~ n 这n 个整数的十进制表示中1 出现的次数。例如,输入12, 1~12 这些整数中包含1的数字有1 、10 、11 和12, 1 一共出现了5 次。直观解法:直观解法,遍历从1到n,分别对每个数字含有的1个数求和 分析数字解法分析数字,分别计算每一位1出现的次数分析规律:首先对某一位的几个变量权值 p:个位权值为1,十位权值为10,百位权值...原创 2019-05-21 19:20:40 · 519 阅读 · 0 评论 -
算法题:25匹马,找出最快的3匹,最少需要多少次比赛
笔试题:25匹马,找出最快的3匹,但是只有5个赛道,每次比赛只能得到5匹马的速度排序,那么最少需要多少次比赛答案:7分析:1-5 场:将25匹马分为5组,每组5匹,得到下面的排序,每组最快的马在左侧,即X1、X6、X11、X16、X21分别是每组中最快的。组1:X1 X2 X3 X4 X5组2:X6 X7 X8 X9 X10组3:X11 X12 X13 X14 X15...原创 2019-07-29 12:57:23 · 6838 阅读 · 1 评论 -
算法题:用一个骰子生成1到7的随机数
解法1:将一个筛子扔两次可以得到36种组合,每五种组合代表一个数字,剩下的一种表示重扔。第一步:将这个筛子扔两次,假设第一次扔的时候得到a,第二次是b,表示为(a, b)。第二步:1: (1, 1), (1, 2), (1, 3), (1, 4), (1, 5)2: (1, 6), (2, 1), (2, 2), (2, 3), (2, 4)3: (2, 5), (2, 6), (3...原创 2019-07-22 11:00:24 · 4977 阅读 · 0 评论 -
如何快速获取到Top 10最热门的搜索关键词?
因为用户搜索的关键词,有很多可能都是重复的,所以我们首先要统计每个搜索关键词出现的频率。我们可以通过散列表、平衡二叉查找树或者其他一些支持快速查找、插入的数据结构,来记录关键词及其出现的次数。假设我们选用散列表。我们就顺序扫描这 10 亿个搜索关键词。当扫描到某个关键词时,我们去散列表中查询。如果存在,我们就将对应的次数加一;如果不存在,我们就将它插入到散列表,并记录次数为 1。以此类推,等遍历...原创 2019-08-05 10:43:45 · 1533 阅读 · 0 评论 -
算法题:求两个字符串的最长公共子串
问题:有两个字符串str和str2,求出两个字符串中最长公共子串长度。比如:str=acbcbcef,str2=abcbced,则str和str2的最长公共子串为bcbce,最长公共子串长度为5。算法思路:1、把两个字符串分别以行和列组成一个二维矩阵。2、比较二维矩阵中每个点对应行列字符中否相等,相等的话值设置为1,否则设置为0。3、通过查找出值为1的最长对角线就能找到最长公共子串。针...原创 2019-07-27 08:01:29 · 1139 阅读 · 0 评论 -
算法思想:贪心算法
关于贪心算法,我们先看一个例子。假设我们有一个可以容纳 100kg 物品的背包,可以装各种物品。我们有以下 5 种豆子,每种豆子的总量和总价值都各不相同。为了让背包中所装物品的总价值最大,我们如何选择在背包中装哪些豆子?每种豆子又该装多少呢?实际上,这个问题很简单,我估计你一下子就能想出来,没错,我们只要先算一算每个物品的单价,按照单价由高到低依次来装就好了。单价从高到低排列,依次是:黑豆、...转载 2019-08-05 11:48:08 · 455 阅读 · 0 评论 -
算法思想:分治算法
分治算法(divide and conquer)的核心思想其实就是四个字,分而治之 ,也就是将原问题划分成 n 个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。这个定义看起来有点类似递归的定义。关于分治和递归的区别,我们在排序(下)的时候讲过,分治算法是一种处理问题的思想,递归是一种编程技巧。实际上,分治算法一般都比较适合用递归来实现。分治算法...转载 2019-08-05 14:16:45 · 338 阅读 · 0 评论 -
算法思想:回溯法
很多经典的数学问题都可以用回溯算法解决,比如数独、八皇后、0-1 背包、图的着色、旅行商问题、全排列等等。笼统地讲,回溯算法很多时候都应用在“搜索”这类问题上。不过这里说的搜索,并不是狭义的指我们前面讲过的图的搜索算法,而是在一组可能的解中,搜索满足期望的解。回溯的处理思想,有点类似枚举搜索。我们枚举所有的解,找到满足期望的解。为了有规律地枚举所有可能的解,避免遗漏和重复,我们把问题求解的过程...转载 2019-08-05 14:22:17 · 682 阅读 · 0 评论 -
算法思想:动态规划
动态规划比较适合用来求解最优问题,比如求最大值、最小值等等。它可以非常显著地降低时间复杂度,提高代码的执行效率。不过,它也是出了名的难学。它的主要学习难点跟递归类似,那就是,求解问题的过程不太符合人类常规的思维方式。对于新手来说,要想入门确实不容易。不过,等你掌握了之后,你会发现,实际上并没有想象中那么难。0-1 背包问题对于一组不同重量、不可分割的物品,我们需要选择一些装入背包,在满足背包最...转载 2019-08-05 15:35:51 · 340 阅读 · 0 评论