
algorithm
蒙娜丽宁
华为HDE(HUAWEI Developer Experts),UnityMarvel创始人,开放原子基金会银牌讲师,51CTO学堂金牌讲师,IT畅销书作者。从事软件研究和开发超过20年,长期从事编译器、人工智能、Python、Go、JavaScript、Java及跨平台技术的研究和开发工作,曾出版超过40本IT图书。主要著作包括《Python从菜鸟到高手》、《Python爬虫从菜鸟到高手》、《奇妙的Python:神奇代码漫游之旅》。
展开
-
Base64编码原理与实现
本文为原创,如需转载,请注明作者和出处,谢谢! Base64编码的原理是按bit将每6个bit转换成Base64编码表中的相应字符。下面是Base64的编码表:0 A 17 R 34 i 51 z 1 B 18 S 35 j 52 0 2 C 19 T 36 k 53 1 3 D 20 U 37 l 54 2 4 E 21 V 38 m 55 3原创 2009-05-29 19:15:00 · 1303 阅读 · 0 评论 -
不使用中间变量交换两个数(Java版)
在程序中实现交换两个数的功能并不复杂,但如果不使用中间变量,就需要动一下脑筋。在本文介绍了两个方法(其实原理都是一个)。其基本原理就是数的中和。也就是说,通过某种运算(二元运算)将a和b两个数变成一个数,并保存在其中一个变量中。然后再通过同样的运算符将a或b中和掉。这样实际上是利用了a或 b本身作为了中间变量。原创 2010-07-28 10:19:00 · 1694 阅读 · 0 评论 -
有道难题2009复赛题解答(Java版):求大于给定数的最小不重复数
本文为原创,如需转载,请注明作者和出处,谢谢!最近看了有道出的几个复赛题,觉得很好玩,现给出Java版的答案。先看看提干部分 如果一个数字十进制表达时,不存在连续两位数字相等,则称之为“不重复数”。例如,105,1234和12121都是“不重复数”,而11,100和1225不算。给定一个long类型数字A,返回大于A的最小“不重原创 2010-05-11 16:20:00 · 4549 阅读 · 33 评论 -
百度面试题的java实现
本文为原创,如需转载,请注明作者和出处,谢谢! 有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最小时间原创 2008-05-10 09:24:00 · 1105 阅读 · 1 评论 -
全排列算法原理和实现
本文为原创,如需转载,请注明作者和出处,谢谢!全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为例说明如何编写全排列的递归算法。1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。由于一个数的全排列就是其本身,从而得到以上结果。2、再看后三个数原创 2008-05-11 15:24:00 · 1209 阅读 · 2 评论 -
快速排序(quicksort)算法实现
快速排序(quicksort)是分治法的典型例子,它的主要思想是将一个待排序的数组以数组的某一个元素X为轴,使这个轴的左侧元素都比X大,而右侧元素都比X小(从大到小排序)。然后以这个X在变换后数组的位置i分为左右两个子数组,再分别进行快速排序,直到子数组中只有一个元素为止。快速排序算法如下Code highlighting produced by Actip原创 2008-05-14 20:23:00 · 1331 阅读 · 1 评论 -
选择排序(selection sort)算法实现
从字面上理解,就是通过不断地选择数组元素,从而达到排序的目的。我插入排序类似,假设第i(i算法的时间复杂度为O(n^2)。算法的实现如下Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include原创 2008-05-16 13:23:00 · 1153 阅读 · 0 评论 -
拆半查找的递归和非递归算法
本文为原创,如需转载,请注明作者和出处,谢谢!Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include stdio.h> int binary_search(int x, int data[],原创 2008-05-11 22:24:00 · 1194 阅读 · 0 评论 -
希尔排序(shellsort)算法实现
希尔排序(shellsort)又叫增量递减(diminishing increment)排序,是由D.L. Shell发明的,这个算法是通过一个逐渐减小的增量使一个数组逐渐趋近于有序从而达到排序的目的。 假设有一个数组int data[16] = {...}。 首先将这个增量设为16 / 2 = 8,这样就将这个数组分成了8个子数组,它们的索引是0, 8原创 2008-05-15 22:23:00 · 1456 阅读 · 0 评论 -
09考研数据结构试题的一种解法(Java版)
本文为原创,如需转载,请注明作者和出处,谢谢! 虽然研究生已毕业,但看到有一些难度的研究生考试题还是忍不住要做做,本文给出了09年研究生入学考试的一道数据结构题的Java实现。该题的描述如下图所示。 该题的两种实现一位朋友已经完成了,详见递归和非递归实现 。在本文将给出另外一种算法,该算法的空间复杂度为O(1),时间复杂度为O(n)。这在空间复杂度和原创 2009-01-17 20:21:00 · 1062 阅读 · 0 评论 -
一著名软件公司的java笔试算法题的答案
本文为原创,如需转载,请注明作者和出处,谢谢! 原题如下:用1、2、2、3、4、5这六个数字,用java写一个程序,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。 解题思路: 很明显,这是一个递归算法。我们可以排列将这6个数按从小到大的顺序排一下,如果是1,2,3,4,5,6,那么会有1*2*3原创 2008-05-10 09:24:00 · 839 阅读 · 0 评论 -
《程序员》第9期智慧擂台题目——高频词汇提取
本文为原创,如需转载,请注明作者和出处,谢谢! 面对浩瀚的信息海洋,找到想要的资源有时真的是不容易。在大量文字中搜索高频词汇是信息搜索和数据压缩的共通课题。这次智慧擂台请大家在一个比较庞大的英文文本中找出M个数量最多的短语(由N个单词组成)。统一处理相同的文本文件,该文本只包含英文单词、空格和回行符,比较谁的程序效率最高。 程序输入:M,N,文本文件路径(M不超过2原创 2008-05-10 09:24:00 · 1049 阅读 · 0 评论 -
整数划分算法原理与实现
本文为原创,如需转载,请注明作者和出处,谢谢! 整数划分问题是将一个正整数n拆成一组数连加并等于n的形式,且这组数中的最大加数不大于n。 如6的整数划分为 6 5 + 1 4 + 2, 4 + 1 + 1 3 + 3, 3 + 2 + 1, 3 + 1 + 1 + 1 2 + 2 + 2, 2 + 2 +原创 2008-05-11 15:24:00 · 1343 阅读 · 0 评论 -
棋盘覆盖问题的算法实现
本文为原创,如需转载,请注明作者和出处,谢谢! 在一个2^k * 2^k个方格组成的棋盘中,有一个方格与其它的不同,若使用以下四种L型骨牌覆盖除这个特殊方格的其它方格,如何覆盖。 四各L型骨牌如下图1 图1 棋盘中的特殊方格如图2图2 实现的基本原理是将2^k * 2^k的棋盘分成四块原创 2008-05-11 22:23:00 · 1502 阅读 · 0 评论 -
得到第K个大的数算法研究
本文为原创,如需转载,请注明作者和出处,谢谢! 第一种算法是最容易想到的,就是利用快速排序的思想,将一个数组分成以某一个数X为轴,左边的所有的数都比X小,而右边的数都比X大。但我快速排序不同的是,在这个算法中只考虑X的一边,而不是两边都考虑。 如果X的位置是i,那么要得到第k个数,如果k源码如下:Code highlighting pro原创 2008-05-12 20:23:00 · 2616 阅读 · 0 评论 -
生成n*n蛇形矩阵的算法
本文为原创,如需转载,请注明作者和出处,谢谢! 在描述算法之前,先看看下面的5*5的表格: 1 3 4 10 11 2原创 2009-07-24 11:48:00 · 2465 阅读 · 0 评论 -
一道腾讯面试题的思考:到底谁会赢?
有甲乙两家伙用一个英语单词玩游戏(无聊的人还是很多的!!!)。两个人轮流进行,每个人每次从中删掉任意一个字母,如果剩余的字母序列是严格单调递增的(按字典序a < b < c <....<z,假设单词字母不区分大小写,也就是说,a与A算相等),则这个人胜利。假设两个人都足够聪明(即如果有赢的方案,都不会选输的方案 ),甲先开始,问他能赢么?原创 2013-12-15 22:01:03 · 6024 阅读 · 6 评论