面试题
零落_World
https://github.com/cdj0311
展开
-
最大/小的K个数问题
把平时遇到的一些笔试面试题记录下来,收集在一起。找出最大/小的K个数老生常谈的一个题目了,方法都是先建立大小为K的最大/小堆,每次拿出一个数与堆顶元素比较,时间复杂度为O(1),然后重建堆,时间复杂度为O(log K)。对于N个数,总共的时间复杂度为O(Nlog K)。使用STL能够很方便的实现该功能,代码如下://最大k个数typedef multiset> intSet;t原创 2014-03-30 18:40:12 · 771 阅读 · 0 评论 -
最大公共子序列,最大公共子串,最大回文子串
1、两个字符串中最长公共子序列该问题是动态规划的经典问题,找出的公共序列不一定是连续的,参考资料很多,这里就贴出公式和代码,做个简单的笔记。设序列a,b的长度分别为n和m,L(i,j)为a(i),b(j)的最长公共子序列长度,有递推公式:时间复杂度为O(mn),代码如下:#define N 50intlcs(char *a, char *b, char *c){ i原创 2014-03-31 12:04:09 · 745 阅读 · 0 评论 -
链表的各种题目整理(C语言实现)
目录(?)[+]计算链表长度反转链表查找倒数第k个元素尾结点记为倒数第0个查找中间结点逆序打印链表判断一个链表是否有环找出链表中环的入口结点判断两个单链表是否相交找两个链表相交的交点O1删除结点不给头结点两个链表右对齐打印这里处理的全部是单链表:typedef struct node { char *data; struct n转载 2014-04-21 15:01:27 · 1180 阅读 · 0 评论 -
找出满足条件的数
1、找出数组中满足条件的两个数,如数组a={12,4,10,19,3,55,38,40,77,8},输入59,则打印4+55=59,19+40=59。方法很简单,先对数组排序,时间复杂度为O(nlogn),然后用两个指针分别指向数组的首位和末尾,将首末两数相加和为S,如果S等于给定的数SUM则记录,如果S>SUM则尾指针减一,如果Sint FindNumsSum(int arr[]原创 2014-04-01 21:54:09 · 1912 阅读 · 0 评论 -
一些重要的算法
酷壳: http://CoolShell.cn/ 原文: http://coolshell.cn/?p=2583 下面是一些比较重要的算法,原文罗列了32个,但我觉得有很多是数论里的或是比较生僻的,和计算机的不相干,所以没有选取。下面的这些,有的我们经常在用,有的基本不用。有的很常见,有的很偏。不过了解一下也是好事。也欢迎你留下你觉得有意义的算法。(注:本篇文章并非翻译,其中的算法转载 2014-08-29 20:40:11 · 767 阅读 · 0 评论