Algorithm
fantian830211
-
求逆序对的个数(选择排序)
求逆序对的个数逆序对是指数列中与需要排序的大小相反的数对。比如:数列中,从小到大逆序对的个数是8个,分别是逆序对可以用来衡量当前数列排序的情况,如果逆序对个数是零的时候,数列就是已经排序好的。求法:1.求逆序对的个数的算法很简单可以想象到修改选择排序就可以计算出逆序对的个数。具体如下:比如数列1: 选择第1个数5和他后边的数比较,得到逆序对,代价是C1*4(C1是常数)2: 选择第2个数原创 2009-01-22 13:29:00 · 1303 阅读 · 0 评论 -
软件开发者面试百问-----有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?
有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?这个我想用计数排序的办法解决这个问题.1.新生成一个数组:int[] Num = new int(1,000,000)2.循环原来的数组oldNum for(oldNum: i) { Num[oldNum[i]]++; if(Num[oldNum[i]] == 2) {原创 2009-03-07 10:59:00 · 2538 阅读 · 2 评论 -
软件开发者面试百问-----怎样在内存中实现伦敦地铁的结构?
怎样在内存中实现伦敦地铁的结构? 我想这个说的就是数据结构中的图,图常用的表示方法有两种:邻接表和邻接矩阵,都可以用来表示有向图和无向图。我想我们这里可以假设伦敦地铁是无向图,因为两个站点一般都是可以互相通行的。比如地铁结构如下:①----②-----③| / /| / /| / /⑤--④---⑥邻接表:①---②---⑤②原创 2009-03-14 23:07:00 · 1934 阅读 · 0 评论 -
软件开发者面试百问-----怎样以最有效的方式在数据库中存储颜色值?
以RGB颜色为例,数据库中存储的方式有两种:1,整数2,字符串 我感觉应该没有人会用颜色作为主键或者索引,所以比较高效的办法就是跟存储空间相关了。以Oracle为例1,number类型的存储#FFFFFF需要的空间是:3个字节 #FFFFFF = 11111111,11111111,11111111 2,如果是字符串类型 #FFFFFF原创 2009-03-20 23:59:00 · 4280 阅读 · 0 评论 -
软件开发者面试百问-----用堆或者栈存储数据的区别是什么?
因为这里讨论的是数据结构,所以我们从数据结构方面来考虑堆和栈。堆:这个词最初从堆排序中衍生出来的,常见的堆有二叉堆,二项堆,斐波那契堆。最简单的是二叉堆,其实就是一棵完全二叉树。树的每一层都是填满的,最后一层除外。二叉堆分为最大堆和最小堆,最大堆的性质如下:根节点的值大于其所有孩子的值,最小堆相反。二叉堆常用来构造优先级队列,或者完成堆排序。栈:很简单,就是只有一个出口的数据结构,有p原创 2009-03-28 10:48:00 · 1490 阅读 · 0 评论 -
软件开发者面试百问-----怎样在数据库中存储N维向量?
这个题目不知道怎么回答才好,也不知道跟数据结构有什么关系,难道就是说的二维数组?N维向量说的简单点就是N个有序数组,就是我们常见的二维数组。设计一个表,结构如下:vectorvectorNo Data11 AA1,BB1,CC1,DD1,EE112 AA2,BB2,CC2,DD2,EE213 AA3原创 2009-04-05 21:10:00 · 3430 阅读 · 0 评论 -
软件开发者面试百问-----怎样在XML文档中存储足球比赛结果(包括队伍和比分)?
我感觉可以这样存储: 1:0 1:5 ................原创 2009-04-05 21:50:00 · 2142 阅读 · 0 评论 -
一个查找的问题
一个查找的问题 题目大概是这样的:一个文件保存有100亿条连接请求记录(IP, 时间,按照时间排序)如果同一个IP地址10秒内有两次或以上的连接请求,那么则视其为攻击。问如何找出这些IP。比如下面的数据,应该找出 202.118.1.98 202.118.1.98 2009-01-01 12:34:56.1234 202.118.2.98 2009-01-01 12:34:56.2234原创 2009-08-20 14:19:00 · 815 阅读 · 0 评论 -
软件开发者面试百问-----怎样把字符串反转?你能不用临时的字符串么?
这个简单,就是第一个和最后一个交换,第二个和倒数第二个交换。。。。。。public class Test { public static void main(String [] args) { char [] chars = { A, B, C, D, E }; reverse(chars); for (in原创 2009-03-03 21:40:00 · 1702 阅读 · 1 评论 -
软件开发者面试百问-----在散列表和排序后的列表中找一个元素,哪个查找速度最快?
在散列表和排序后的列表中找一个元素,哪个查找速度最快? 关于这个问题我感觉平均情况下散列表会比排序后的列表要快。1.原理 a.散列表的查找的原理依赖散列函数,而查找次数则有负载因子决定。 与整个容量没有关系,也就是说与长度没有关系。 b.排序后的列表查找跟列表的长度有直接关系。 2.查找时间复杂度 a.散列表 散列表所花费的时间主要在计算地址和发生冲突时再次散列所花原创 2009-02-28 16:16:00 · 2422 阅读 · 0 评论 -
软件开发者面试百问-----不管是书、杂志还是网络,你从中所学到的最后一点算法知识是什么?
不管是书、杂志还是网络,你从中所学到的最后一点算法知识是什么?我感觉是:时间和空间是一对矛盾,选择合适我们的,而不是最好的!原创 2009-03-01 20:37:00 · 1022 阅读 · 0 评论 -
求算一任意长度字符串中不同的字符以及它的个数
求算一任意长度字符串中不同的字符以及它的个数在网上看到这样一个题目,并且有人用Python给出了答案。自己想出了一个办法,不知道是不是最好的,暂且先给出来一个Java的答案。我的想法是利用计数排序的思想来统计字符以及字符的个数。代码如下:public class Selection { public static void main(String[] args) { s原创 2009-02-02 14:12:00 · 1500 阅读 · 0 评论 -
合并排序
合并排序基于分治思想的合并排序。 ------------------------代价是C2*8(C2是常数) -------------------代价是C2*8(C2是常数) ---------------代价是C2*8(C2是常数)原创 2009-01-23 11:43:00 · 551 阅读 · 0 评论 -
求逆序对个数(合并排序)
求逆序对个数(合并排序) ------------------------代价是C2*8(C2是常数) -------------------代价是C2*8(C2是常数) ---------------代价是C2*8(C2是常数) ----原创 2009-01-23 12:40:00 · 947 阅读 · 0 评论 -
堆排序的实现
堆排序的实现1.基本思想① 先将初始序列A[1..n]建成一个大根堆② 再将关键字最大的记录A[1](即堆顶)和无序区的最后一个记录A[n]交换,由此得到新的无序区A[1..n-1]和有序区An],且满足A[1..n-1].keys≤A[n].key③ 由于交换后新的根A[1]可能违反堆性质,所以应将当前无序区A[1..n-1]调整为堆。然后再次将A[1..n-1]中关键字最大的记录A[1]和该区原创 2009-02-18 19:33:00 · 875 阅读 · 0 评论 -
软件开发者面试百问-----怎样知道一个数字是不是2的乘方?怎样判断一个数是不是奇数?
软件开发者面试百问-----怎样知道一个数字是不是2的乘方?怎样判断一个数是不是奇数?1.怎样知道一个数字是不是2的乘方? a. 假设这个数大于1,有下面的办法(即使这个数小于1,办法也是类似的)。 这个有两个办法,一个就是不停地除以2,直到最后的余数是0,如果最后是1的话,那么就不是2的乘方。 还有一个办法就是搜索整数里的所有的2的乘方,但是可以通过当前数的大小来判断搜索的空间,代码如下原创 2009-02-21 23:04:00 · 3176 阅读 · 1 评论 -
软件开发者面试百问-----怎样找出链表中间的元素?
如何找到链表的中间元素呢?1. 如果是双向链表,那么设置两个指针,一个指向头 一个指向尾,指向头的指针和指向尾的指针同时向后向前移动, a.当他们的next为对方的时候,这两个指针指向中间的两个元素 b.上面的情况时偶数个元素的情况,如果是奇数个元素呢? 这个时候需要判断他们指向的是不是同一个元素,如果是, 那么这个元素就是中间的元素 所以,双向链表需要判断原创 2009-02-23 22:46:00 · 1639 阅读 · 0 评论 -
软件开发者面试百问-----怎样改变10,000个静态HTML页面中所有电话号码的格式?
怎样改变10,000个静态HTML页面中所有电话号码的格式? 如果要改变这么多的电话号码的格式,我想不管怎么样,肯定得先找到这些电话号码在什么地方,找出来之后修改他们的格式,然后放回去。这样的话,这个问题就变成了字符串查找的问题。可以按照下面的步骤:1. 打开一个文件,读取他的HTML文本2. 查找所有的电话号码 a.这个步骤是最关键的,比如我是做Java的,我肯定会用Java内置的原创 2009-02-27 23:57:00 · 2114 阅读 · 0 评论 -
软件开发者面试百问-----举出一个你所用过的递归的例子。
做开发也差不多4年了,由于做的是Web开发,而且用Java,几乎都很少用到递归这样的办法。以前面试的时候做过一个Fibonacci数列的计算,就是用的Fibonacci。public class Test{ public static void main(String[] args) { System.out.println(fibonacci(10));原创 2009-02-28 00:08:00 · 1127 阅读 · 0 评论 -
一道有趣的数字算法题
一道有趣的数字算法题原创 2010-08-05 21:50:00 · 997 阅读 · 0 评论