算法
文章平均质量分 88
文西
过得太舒服,就是不自在的人
展开
-
LRU原理和Redis实现——一个今日头条的面试题
很久前参加过今日头条的面试,遇到一个题,目前半部分是如何实现 LRU,后半部分是 Redis 中如何实现 LRU。我的第一反应是操作系统课程里学过,应该是内存不够的场景下,淘汰旧内容的策略。LRU ... Least Recent Used,淘汰掉最不经常使用的。可以稍微多补充两句,因为计算机体系结构中,最大的最可靠的存储是硬盘,它容量很大,并且内容可以固化,但是访问速度很慢,所以需要把使用的内容原创 2018-03-13 21:23:00 · 28755 阅读 · 4 评论 -
百度面试题——需找下一个排列(Find next permuation, POJ 1883)
面试中关于排列的题目还是蛮常见的,之前有个同学面百度,就遇到了一个排列题目,分享一下。题目描述:给你一个数组,如果是按照数字的大小排序,那么请你输出当前数组的下一个排列是什么例如, 下面的数据,就是按照排列序生成的四组数据。3 1 2 4 53 1 2 5 43 1 4 2 53 1 4 5 2百度一下发现POJ上居然有一个一模一样题目: htt原创 2012-08-17 10:08:39 · 3418 阅读 · 1 评论 -
POJ 2559 单调栈 Histogram
题目在http://poj.org/problem?id=2559。这个题目是一个好朋友给我讲的方法,我按照自己的理解,敲出来代码。 所以把算法流程和代码贡献出来,希望和大家共同学习。题目大意:给出一个柱形统计图(histogram), 它的每个项目的宽度是1, 高度和具体问题有关。 现在编程求出在这个柱形图中的最大面积的长方形。例如: 7 2 1 4 5 1 3 3原创 2012-08-15 12:37:54 · 9161 阅读 · 4 评论 -
POJ 3267 动态规划
题目地址: http://poj.org/problem?id=3267这个题目我自己不是很明白如何做动态规划,看到一个同学的帖子,ac了题目,不过似乎还有一些似懂非懂,转载一下思路,慢慢想吧。题思路动态规划 题意就是给出一个主串,和一本字典,问最少在主串删除多少字母,可以使其匹配到字典的单词序列。PS:是匹配单词序列,而不是转载 2012-08-13 22:44:13 · 1361 阅读 · 0 评论 -
经典面试题--寻找01矩阵中最大的1矩形(POJ 3494)
POJ地址:http://poj.org/problem?id=3494题目简述题目的描述很简单,在一个M * N的矩阵中,所有的元素只有0和1, 找出只包含1的最大矩形。例如:图中是一个4 × 6的矩形,画出红色的是我们要找到的区域。最开始见过这个题目是在看一个人写的面经里面,当时完全没有感觉,不知道怎么做。后来知道了一个东西叫单调栈然后做了一些题,居然发现POJ原创 2012-08-15 19:11:46 · 17510 阅读 · 0 评论 -
POJ 1062 DFS
感觉自己已经有N久没有写过DFS算法了,因为这道题目在DFS的过程中会保留和计算一些值,所以导致程序看起来有点丑陋。话不多说 贴题说思路,目前水平有限,发博客的主要原因是要写给自己,作为一段时间学习的印证吧。题目地址: http://poj.org/problem?id=1062这道题目也是POJ上 少有的中文题目了,所以很快能读懂。不过回想去年这道题其实自己尝试过一次,不过没有解出来,后原创 2012-07-30 22:18:49 · 1262 阅读 · 0 评论 -
POJ 1742 多重背包问题
在《背包九读》里,作者提到了最后的一种基本背包问题是多重背包问题在所有背包问题中,问题都是一致的:有若干个物体,P(Wi, Vi) ,每个重量用wi表示,选择后能获得的价值用Vi表示。然后有一个总容量,在满足不超过总容量的情况下,使得选择的物体尽量价值最大。01背包中,物体只有一个要么选,要么不选。在 完全背包问题中,每个物体都有无数个,也可以选择无数个。在 多重背包中,物体的个数原创 2012-07-28 20:13:08 · 1234 阅读 · 0 评论 -
POJ 1384 完全背包问题
阅读《背包九讲》的同时,配合做一下POJ上的题目。上次练习是01背包问题,这次练习是完全背包问题。在01背包问题中,出现的背包要么选择,要么不选择。而在完全背包问题中,背包出现的次数是没有上限的,即可以选择任何次数的。在背包九讲里,作者给出了一个状态转移方程,核心代码如下:for( int i = 0; i < nObject; i++){ for( int j = weig原创 2012-07-28 11:00:37 · 3075 阅读 · 0 评论 -
POJ 3250 单调堆栈
其实今天是第一次听说这个数据结构。顺便AC了一道题目:http://poj.org/problem?id=3250先说说单调堆栈吧,其实网上对这个东西的介绍不是很具体,百度知道上也只是有很简单的描述,其实这个堆栈就是一种对压入堆栈的元素有一定限制的堆栈,例如单调递增或者单调递减。如果当前要压入堆栈的元素不满足递增或者递减要求,则从栈结构中弹出一些数据,直到变成空,或者满足单调条件。所以原创 2012-07-29 16:59:02 · 1321 阅读 · 0 评论 -
POJ 2062 完全背包
题目在http://poj.org/problem?id=2063上一篇文章练习了一个完全背包问题,这里又做了一个意图在于巩固吧,正所谓孰能生巧。题目大概的意思是说:一共有M元钱,用于做N年的投资。一共有K中债券可以买,每种债券用(Ci, Ii)来表示,意图是话费为Ci,年终回报的Ii可以每年年初买好债券,年后卖掉重新买进。问在N年后,最大可以使得资产变为多少。其实原创 2012-07-28 12:59:59 · 1750 阅读 · 0 评论 -
POJ 1276 多重背包问题
题目在 http://poj.org/problem?id=1276题目大意是说,我现在要从ATM中取钱,MATM里面有若干种货币,每一种都有对应的货币面额和张数。问现在ATM能够取出来的 小于等于M的最大金额。若将M理解为背包重量,而每种货币的面额理解成 value,货币的面额同样理解成重量,那么这个问题就是一个多重背包问题。多重背包问题可以转换成完全原创 2012-08-13 14:41:27 · 2097 阅读 · 0 评论 -
POJ 1226 Substrings KMP
题目在:http://poj.org/problem?id=1226不知道为什么当时没有AC掉这个题目,后来看看自己当时提交的代码还是有很多问题的,所以还是写了这个东东,算是自己对这个题目的反思吧。题目大意:给出一些字符串的集合 D,然后找出一个字符串S,这个字符串满足如下条件:S自身,或者S的Reverse,都是D中任意字符串的字串。求出最长的S的长度。S原创 2012-08-13 11:27:54 · 1015 阅读 · 0 评论 -
POJ 1837 01背包变种
题目地址在:http://poj.org/problem?id=1837做这个题目的开始,真的还没有什么思路,即使有人说是01背包,不过依然不知道如何将问题装换成01背包的模型。在比较经典的背包问题中,一般会有一些物品,物品用(Wi, Vi)组成,Wi表示其重量,Vi表示其价值。 然后给一个容量固定的背包,然后选择物品,达到价值最大这个目标。1. 当物品可以分割的时候,贪心算法2.原创 2012-08-13 09:40:06 · 2045 阅读 · 0 评论 -
百度面试题 --- 锦标赛排序
面了一次百度,暂时完成两轮技术面试,感觉每次都好多题目,并且有一些不知道怎么回答,看来准备的还是不够好。 先分享一个题目吧:给出一个长度是N的数组,现在要找出最大的两个元素,最少要多少次比较。分析: 如果找出1个最大的,比较次数无疑是 n - 1, 现在如果已经找出最大的了,那么再找第二大的,如果用竞赛排序的方法,可以再使用 logn就可以找到了。 不过不知道怎么证明 这是原创 2012-08-29 20:21:51 · 6829 阅读 · 7 评论 -
百度面试题---疯子上飞机
题目的描述是:有100个人上飞机,本应该按照各自的座位1-100号坐下,但其中有一个是疯子疯子的行为是:随机选择一个座位坐下。 而正常人的行为是: 尽量做自己的座位,如果自己的座位被占了,就随机选一个座位。 问题是:最后一个人坐在自己的位置的概率是多大。分析:这个题目里疯子登机号也是随机的,我们可以先简化问题成,假设有n个人,疯子是第一个登机的,求出最后一个人坐在自己位原创 2012-08-30 08:48:32 · 8470 阅读 · 15 评论 -
经典面试题总结 —— Binary Search 及其变种
二分查找是在技术面试中经常出现的题目,首先这种题目考察思路,另外因为代码一般很短----不会超过50行。所以很适合做技术笔试,或者面试之类的题目出现。之前做过一些题目,很多是BS算法的变种,我这里给出几个例子,算是做一个总结吧。1. 传统的Binary Search 1.1. 最普通的BS算法就是给定一个排好序的数组,然后查找一个数是否在数组内,如果在给出下标,如果不在原创 2012-08-18 13:52:53 · 5487 阅读 · 13 评论 -
机器学习在饿了么竞价广告中的实践
本文介绍的内容,有真亦是假假亦真的部分,请读者自行斟酌。具体数据比较敏感,都使用模糊的描述方式代替。概述竞价广告,这个在大百度的时代就家喻户晓的词汇,相比大家也很熟悉了。顾名思义,竞价、竞价,广告位置有限,满足条件的竞争商家有很多,那么如何选择商家对商家排序。价高者应该是在没有任何数据积累的情况下,最原始的策略。这类广告的收费模型往往是按照点击次数付费(CPC),如果价高者得广告位,但是因为自身原原创 2017-12-22 16:06:07 · 2760 阅读 · 0 评论 -
PMML模型文件在机器学习的实践经验
算法工程师和业务开发工程师,所掌握的技能容易在长期的工作中出现比较深的鸿沟,算法工程师辛辛苦苦调参的成果,业务工程师可能不清楚如何使用,如何为线上决策给予支持。本文介绍一种基于PMML的模型上线方法。这种方案,在本次参加 QCon 大会时,Paypal的机器学习平台中也有所提及:PMML预测模型标记语言(Predictive Model Markup Language,PMML)是一种可以呈现预测原创 2017-10-23 18:33:25 · 25032 阅读 · 7 评论 -
GBDT的原理和应用
周二、周三参加了QCon上海2017|全球软件开发大会,听了几场机器学习相关的 Session,多次提及 GBDT(Gradient Boost Decision Tree),并且在模型演化历史中,都有很重要或者最重要的地位。如《Pinterest如何利用机器学习实现两亿月活跃用户》提到的模型发展历史,GBDT带来过巨大的效果提升。迭代决策树(GBDT)《唯品金融机器学习实践》中也提到因为GBDT原创 2017-10-23 13:42:54 · 10732 阅读 · 2 评论 -
Jsoup 实现的基于列表-详情结构的网页爬虫
问题阐述: 对于很多应用而言,都需要搜集一些资讯内容充实自己的内容,这样可以丰富站点内容,增加用户停留的时间。最原始的办法,莫过于复制粘贴,但是,当如果目标网站是几个,甚至几十个的时候,复制粘贴并不是长久之计,劳心劳力,又容易搞错。所以基于程序的数据爬取就十分重要。但是几乎每个网站,都有他独特的结构,看起来要针对每个网站独特的结构,来写一套东西,但是这样拓展性也很差。这里我介绍一下,我所实原创 2016-01-30 18:39:28 · 3029 阅读 · 1 评论 -
2012搜狗校园招聘笔试题
1. 选出程序输出的结果#include using namespace std;int main(){ short input[10]={'A','B','C','D','E'}; unsigned char *p=(unsigned char*)&input; int s=0; int temp=sizeof(input); for原创 2012-09-22 21:05:38 · 5875 阅读 · 8 评论 -
Remove Nth Node From End of List
题目连接:http://www.leetcode.com/onlinejudgeGiven a linked list, remove the nth node from the end of list and return its head.For example, Given linked list: 1->2->3->4->5, and n = 2. Af原创 2012-09-19 14:31:07 · 2229 阅读 · 0 评论 -
LeetCode 面试题 Regular expression matching(正则匹配)
题目如下:Implement regular expression matching with support for ‘.’ and ‘*’.‘.’ Matches any single character.‘*’ Matches zero or more of the preceding element.The matching should cover the原创 2012-09-18 16:32:15 · 20510 阅读 · 7 评论 -
网易有道面经(2013校园招聘杭州站)
上机考试:网易有道的筛选模式是先上机考试,然后根据上机考试选择大概1/3参加面试。上机的平台和ACM有点类似,提交代码然后有手动阅卷。上机考试时隔比较久远,不过还能想起两个题目:1. 给定一个点分IP地址表示,写个程序把它转换成相应的32位的无符号整数并输出,如果输入不是合法数据,就返回0.这个题目如何利用好标准输入输出,其实可以很容易判断出不合法的输入用例,不过当时没有想好,导致原创 2012-09-27 21:19:25 · 11061 阅读 · 20 评论 -
Wildcard Matching (Recursive and Non Recursive method) (Leetcode 网易有道面试题)
题目描述 (http://www.leetcode.com/onlinejudge 倒数第三题)Implement wildcard pattern matching with support for '?' and '*'.'?' Matches any single character.'*' Matches any sequence of characters (inc原创 2012-10-04 16:35:33 · 7505 阅读 · 0 评论 -
Bloom Filter概念和原理
Bloom Filter概念和原理焦萌 2007年1月27日转自: http://blog.csdn.net/jiaomeng/article/details/1495500 Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时转载 2012-09-05 12:59:19 · 1917 阅读 · 0 评论 -
最长连续回文串(Longest Palindromic Substring)
题目: Given a string S, find the longest palindromic substring in S.给出一个字符串S,找到一个最长的连续回文串。例如串 babcbabcbaccba 最长回文是:abcbabcba这个题目小弟给出3中解法,前两种的都是 O(n^2), 第三种思路是O(n). 思路1. 动态规划这里动态规划的思路原创 2012-09-01 18:48:01 · 37648 阅读 · 11 评论 -
In-place Merge Sort (原地归并排序)
上次一个同学面微软的实习就被这个问题打败了,自己想不通转载一个http://blog.ibread.net/345/in-place-merge-sort/一般在提到Merge Sort时,大家都很自然地想到Divide-and-Conqure, O(nlgn)的时间复杂度以及额外的O(n)空间。O(n)的extra space似乎成了Merge S转载 2012-08-22 09:37:53 · 5697 阅读 · 3 评论 -
编程珠玑学习笔记 Aha算法 思考以及一些代码实现
"A problem that seems difficult may have a simple, unexpected solution" - 一个看似难以解决的问题,或许在背后隐藏着一个简单,意想不到的解法 三个引例: 1. 输入一个连续文件,文件中存储了之多4,000,000,000个32bit的整数,并且这些整数是按照任意顺序排列的。请你找出一个没有在这个序列中的整数原创 2012-07-19 18:48:26 · 2289 阅读 · 0 评论 -
POJ 3083 BFS
题目地址:http://poj.org/problem?id=3083题目大意: 说有一个迷宫,迷宫有一个入口S和出口E,现在要你求出三种路径各自的长度1. 沿着最左边走。2. 沿着最右边走。3. 最短路径。其实沿着最左,最右方向走的时候,特别需要小心的是考虑在顺时针和逆时针转的时候,当前方向,选择下一个位置,和下一个方向之间的关系。为了更好的解释,我用图说明一下:原创 2012-08-11 10:05:38 · 1135 阅读 · 0 评论 -
POJ 3349 第一道哈希
题目在 http://blog.csdn.net/lyy289065406/article/details/6647351其实在面试中哈希表是经常被问到的一个题目,不过实战编程中运用的却很少,因为很少有效率瓶颈。这个题目就一道典型的可以用哈希表可以加速的题目。题目大意:每片雪花有 6 个角长度的值,对于不同的雪花而言,这些值可能被反转,并且开头的长度未必是一致的例如 1 2原创 2012-08-05 19:12:12 · 2140 阅读 · 0 评论 -
POJ 3216 最小点覆盖 以及一些总结
题目在 :http://poj.org/problem?id=3216题目的大意说,我们的维修队,负责N个街区的维修任务。现在知道各个街区直接的距离。现在有M个任务,每个任务有各自所在的街区(任务可以出现在同一个街区),任务最迟的开始时间,任务持续时间信息。现在编程求出,最少可以派出几名维修员完成维修任务。在这里我想自己把做题出现的两类可以用最大二分图匹配的总结一下。第原创 2012-08-03 23:04:34 · 1307 阅读 · 0 评论 -
POJ 1548 最小路径覆盖
题目在:http://poj.org/problem?id=1548现在练习算法的时候,都是按照分类做的,所以已经知道这个题目可以用最小路径覆盖来解决。所以按照这个方向想想就能把问题转换成最小路径覆盖问题了。题目比较容易理解,就是说收垃圾的机器人从最左上出发,在格子里沿着右和下漫步整个格子一直到最右下面。在有垃圾的地方收垃圾,没有地方可以跳过。然后找出最小的机器人数,可以将所有原创 2012-08-03 20:52:02 · 792 阅读 · 0 评论 -
POJ 2594 最大二分匹配 最小路径覆盖
题目在: http://poj.org/problem?id=2594因为是按照分类做题目,所以在明知这个题目是 最小路径覆盖的时候,就匆忙写好代码,提交,结果WA。检查半天,结果发现题目中的提示:You should notice that the roads of two different robots may contain some same point. 而传统的最小路径覆原创 2012-08-03 20:05:54 · 701 阅读 · 0 评论 -
POJ 3692 最小点覆盖 最大二分图匹配
题目在这里:http://poj.org/problem?id=3692大意是说,在幼儿园中有N女孩M个男孩,其中所有的女孩互相认识,所有的男孩互相认识,并且有一些男孩和女孩互相认识。现在要你找出最多的人,他们都互相认识。这个题目最开始看起来的时候没有想清楚如何转换成最大二分图,在网上找了一些人的文章,一些思路是在二分图里找到最大子团,然后转换成二分图。想了好久,我觉得这样理解原创 2012-08-02 20:12:20 · 999 阅读 · 0 评论 -
POJ 3041 匈牙利算法 最小覆盖 最大二分匹配
题目在这里 http://poj.org/problem?id=3041因为最近在准备找工作,所以一直在学习算法,不过我觉得对于一个初学者来说,最难的不是弄懂一个算法,二是如何将题目编程算法的模型,然后编写出程序。个人觉得这个过程应该就是靠多做题,多分析吧,培养自己的灵感来源。这个题目大概的意思是说, 在一个N*N的矩阵中,有若干个陨石,飞船的大炮可以每次消灭一排或者一列,问如何使得开炮的原创 2012-08-01 20:31:48 · 1225 阅读 · 0 评论 -
在1-n中1出现的次数(微软等IT公司面试一百题)
因为自己想的思路和网络上广泛的思路不一样,所以写一下我的思路,验证结果是正确的题目如下:输入一个整数N,求从1-N这N个整数的十进制表示中1出现的次数,例如输入12,从1到12这些整数中包含1的数字有1,10,11,12, 1 一共出现了5次。(Google面试题目)用两个数字简述我的思路 例如输入为 7111从1-7111可以分解成1-6999 和 111原创 2012-06-24 09:32:14 · 3553 阅读 · 1 评论 -
二叉搜索树和红黑树概述以及模板实现(1)
最近研究了一下算法导论里面关于二叉搜索树和红黑树的一章,对于红黑树的内容虽然还没有完全消化吸收,写一篇blog算是对所有内容的一个复习和反思吧。1. 二叉搜索树二叉搜索树是一颗二叉树,要求对于任何一个节点,它的左儿子内的数据要小于根节点数据,而右节点的数据要大于根节点内的数据。例如在搜索问题中,虽然哈希表在比较好的情况下可以提供O(1)的时间,但是对于数据分布不好,或者数据原创 2012-01-04 22:56:22 · 1143 阅读 · 0 评论 -
二叉搜索树和红黑树概述以及模板实现(2)--红黑树
其实很多人会意识到,如果使用二叉搜索树,在数据不好的情况下,最后查找的效果会变成线性。例如数据 1 2 3 4 5 6 7,根为1,其他数据依次插入在右侧,最后变成一个线性结构,性能就会变差。如何改善二叉搜索树,使得树的高度接近logN,这种特殊的二叉搜索树就可以用红黑树来实现。红黑树满足的五个条件1. 每个节点或是红色,或者是黑色2. 根是黑色的3. 每个叶节点(NIL)是黑色的原创 2012-01-04 23:26:42 · 1178 阅读 · 0 评论 -
PKU ACM 1860 Bellman - Ford 算法
第一次接触 Bellman - Ford 算法。然后做了一个关于这个算法的题目,自己太水,搞了半天也没有AC,参考别人代码了,不过最后还算是敲出来了算法概要:算法采用松弛技术,对图中的所有边做松弛,松弛一共使用了 {V}-1次,因为图中最长的那条边的长度可能是 {V}-1条,所以经过 {V{-1次松弛,所有的边,都能松弛到最佳状态算法导论里,这个算法用来求解,最短路径的,这道题目稍原创 2011-11-28 21:28:19 · 1093 阅读 · 0 评论