基础算法
wangwangfish
这个作者很懒,什么都没留下…
展开
-
算法-超键主键
超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键候选键(candidate key):不含有多余属性的超键称为候选键主键(primary key):用户选作元组标识的一个候选键程序主键比如一个小范围的所有人,没有重名的,考虑以下属性身份证 姓名 性别 年龄身份证唯一,所以是一个超键姓名唯一,所以是一个超键(姓名,性别)唯一,所以是一个超键转载 2012-10-09 09:55:27 · 2404 阅读 · 0 评论 -
算法-把二元查找树转变成排序的双向链表
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 比如将二元查找树 10 / /转载 2012-09-25 11:59:46 · 372 阅读 · 0 评论 -
算法-微软亚院之编程判断俩个链表是否相交
微软亚院之编程判断俩个链表是否相交给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。为了简化问题,我们假设俩个链表均不带环。问题扩展:1.如果链表可能有环列?2.如果需要求出俩个链表相交的第一个节点列?ANSWER://下面这是一般答案struct Node {int data;int Node *next;};// if there i转载 2012-09-25 14:04:37 · 884 阅读 · 0 评论 -
算法- 翻转句子中单词的顺序
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。由于本题需要翻转句子,我们先颠倒句子中的所有字符。这时,不但翻转了句子中单词的顺序,而且单词内字符也被翻转了。我们再颠倒每个单词内的字符。由于单词内的字符被翻转两次,因此顺转载 2012-09-25 15:42:16 · 757 阅读 · 0 评论 -
算法-判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二叉查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11因此返回true。如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。转载 2012-09-25 15:37:18 · 492 阅读 · 0 评论 -
算法-子数组的最大和
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个转载 2012-09-25 12:10:07 · 595 阅读 · 0 评论 -
算法-单向链表逆序
我们假设单向链表的节点如下:templatetypename T>class list_node{public:list_node* next;T data;};void reverse(node*& head) { if ( (head==0)|| (head->next==0) )return;// 边界检测转载 2012-09-19 13:14:04 · 486 阅读 · 0 评论 -
算法-判断链表是否有环
这个在我百度实习面试的时候出了一个题。网上的流行解法:步长法:p=head;q=head;while(p && q && q->next){ p=p->next; q=q->next->next; if(p == q) return 1;}return 0;解释:p每次走一步,q每次走2步,这样如果存在循环节,我们假设转载 2012-09-19 13:01:27 · 520 阅读 · 0 评论 -
算法-寻找第K大的数的方法总结
转载:http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值。 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以下的方式,决定很好,推荐给大家。 所谓“转载 2012-10-15 21:36:14 · 10672 阅读 · 0 评论 -
算法-在1001个整数中找出一个重复出现的数字
假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗?原作者对不用辅助空间的方法进行了描述。但是他用了辅助空间的算法不是最优,于是我给他优转载 2012-09-25 15:27:37 · 1705 阅读 · 0 评论 -
算法-数组连乘问题
一个程度为N的数组,现在要令a[0] = a[1]*a[2]....a[n-1]a[1] = a[0]*a[2]....a[n-1]a[2] = a[0]*a[1]....a[n-1]...a[n-1] = a[0]*a[2]...a[n-2]条件是不能用除法,时间复杂度必须是线性。观察一下题目,每一个元素 i 都被更新成了a[0]到a[n-1],除去转载 2012-09-25 14:47:37 · 1340 阅读 · 0 评论