algorithm
摘要: 最近在网上看到一道twitter的算法面试题,网上已经有人给出了答案,不过可能有些人没太看明白(我也未验证是否正确),现在给出一个比较好理解的答案。
阅读全文
摘要: 有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于o(n)),可以使用任何语言实现
例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。
阅读全文
摘要: 在程序中实现交换两个数的功能并不复杂,但如果不使用中间变量,就需要动一下脑筋。在本文介绍了两个方法(其实原理都是一个)。其基本原理就是数的中和。也就是说,通过某种运算(二元运算)将a和b两个数变成一个数,并保存在其中一个变量中。然后再通过同样的运算符将a或b中和掉。这样实际上是利用了a或 b本身作为了中间变量。
摘要: 最近看了有道出的几个复赛题,觉得很好玩,现给出java版的答案。先看看提干部分。如果一个数字十进制表达时,不存在连续两位数字相等,则称之为“不重复数”。例如,105,1234和12121都是“不重复数”,而11,100和 1225不算。给定一个long类型数字a,返回大于a的最小“不重复数”。
摘要: 在描述算法之前,先看看下面的5*5的表格:
1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 24
15 16 22 23 25
上面的表格很容易看出规律。就是从左上角第一个格开始(起始为1),然后延右上角到左下角的斜线。先从下到上,再从上到下。开始按数字递增排列。也就是说每一个斜线上分别有如下几组数字:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
摘要: 本文介绍了base64编码的基本原理,并给出了一个简单的base64编码的实现
摘要: 虽然研究生已毕业,但看到有一些难度的研究生考试题还是忍不住要做做,本文给出了09年研究生入学考试的一道数据结构题的java实现。本文给出的算法的空间复杂度为o(1),时间复杂度为o(n)。
摘要: 从字面上理解,就是通过不断地选择数组元素,从而达到排序的目的。我插入排序类似,假设第i(i阅读全文
摘要: 希尔排序(shellsort)又叫增量递减(diminishing increment)排序,是由d.l. shell发明的,这个算法是通过一个逐渐减小的增量使一个数组逐渐趋近于有序从而达到排序的目的。
摘要: 快速排序(quicksort)是分治法的典型例子,它的主要思想是将一个待排序的数组以数组的某一个元素x为轴,使这个轴的左侧元素都比x大,而右侧元素都比x小(从大到小排序)。然后以这个x在变换后数组的位置i分为左右两个子数组,再分别进行快速排序,直到子数组中只有一个元素为止。
摘要: 第一种算法是最容易想到的,就是利用快速排序的思想,将一个数组分成以某一个数x为轴,左边的所有的数都比x小,而右边的数都比x大。但我快速排序不同的是,在这个算法中只考虑x的一边,而不是两边都考虑。
摘要: 在一个2^k * 2^k个方格组成的棋盘中,有一个方格与其它的不同,若使用以下四种l型骨牌覆盖除这个特殊方格的其它方格,如何覆盖。
摘要: 全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为
例说明如何编写全排列的递归算法。
摘要: 整数划分问题是将一个正整数n拆成一组数连加并等于n的形式,且这组数中的最大加数不大于n。