首页 > 编程知识 正文

互联网公司常见面试算法,面试算法题

时间:2023-05-06 05:29:31 阅读:13423 作者:203

这里是我在网上搜索到的面试的常见算法,归纳起来,是利人自私。

top k 问题:

选择第k个大小(前k个大小)的数量可以采用类似快速排序的方法,利用快速排序的思想,从数组s中随机找到元素x,将数组分为两个部分Sa和Sb。 Sa中的元素为x以上,Sb中的元素小于x。 在这种情况下,有两种情况。

1 .在sa中元素的个数小于k的情况下,Sb中的第k-|Sa|个元素为第k个数;

2 .如果Sa中的元素个数为k以上,则返回Sa中的第k个数。 时间复杂度几乎为o(n )

你可以用最大的方法。 pop k次就可以了。

海量数据的top k 问题:

例如,从1亿个(n )个中选择最大的10000(m个(m个)。 此时,根据情况进行研究。 如果内存不足,可以选择创建m个最小堆,遍历n个,如果大于堆顶部,则插入。

内存充足的情况下,可以直接采用快速排序法,将n个分为100份数,分别找到100个最大的10000个,最后从100万个中寻找10000个最大的,等等,利用分割统治法。

选取频率最高问题

海量数据的top k问题需要统计其中出现频率最高的100个1g大小的文件(如果有)。 有一个1g大小的文件,其中每行一个词,词大小不超过16字节,内存限制大小为1M。 返回度数最高的100个单词。

情景:依次读取文件,对每个单词x取hash(x ) P00,根据其值保存在5000个小文件(记为x0、x1、…x4999 )中。 这样,每个文件约200k左右。

如果其中有超过1M的文件,也可以继续向下划分,直到用同样的方法分解得到的小文件大小小于或等于1M。

针对每个小文档,针对每个文档统计出现单词及其对应的频率(可以使用trie树/hash_map等),取出出现频率最大的100个单词(可以使用包含100个节点的最小堆),与100个单词相对下一步是合并(相似和合并排序)这5000个文件的过程。

http://www.Sina.com /http://blog.csdn.net/Yangquan hui 1991/article/details/52172768

通常,首先将散列映射到不同的小文件,然后在散列映射中确定频率,最后合并

3358 www.Sina.com/: http://blog.csdn.net/zcsylj/article/details/6802062采取二分法的思考

有一个以此为N1的数组,无论如何检索第一个N2的大个数,数字都在0-10000之间。 可以按基数排序,时间复杂度为o(n )

1 .数组中的逆序对计算。 (剑指报价) ) ) )。

2 .判断一棵树是否是另一棵树的子树(剑指出价)。

3 .数据流要求o(1)中值,o (lgn )插入)剑指报价)

4 .顺时针打印矩阵(剑指关闭) )。

5 .复制复杂链表(剑指报价) () ) ) ) ) ) ) ) ) ) ) )。

6 .二叉排序树中第k小的数(剑指报价) ) ) ) ) ) ) ) )。

7 .反转链表递归、非递归(剑指关) ) ) ) ) ) ) ) )。

8 .链表倒数第k个节点(剑指offer ) )。

9 .排列一半以上的数字(剑指关)。

10 .左旋转字符串(剑指off ) )。

11 .将二叉树打印成多行(剑指关) )。

12 .旋转排列检索(剑指off ) ) ) )。

13 .链表的合并排序

14.trapping rainwater 3359 leet code.com/problems/trapping-rain-water /

15.longestpalindromicsubstring 3359 leet code.com/problems/longest-palindromic-substring /

16.gray code https://leet code.com/problems/gray-code /

17.binarytreemaximumpathsum https://leet code.com/problems/binary-tree-maximum-path-sum /

18.searchforarange https://leet code.com/problems/search-for-a-range /

19 .算术表达式为逆波兰表达式(后缀表示) () ) () ) ) ) ) ) ) ) ) 652 ) ) ) ) ) ) ) ) )

20 .中小学教师

21 .字符串由大小写组成,需要加重,只能使用一些int临时变量,需要尽量减少时间复杂度

22 .青蛙每次跳楼梯,每跳一步或两步,青蛙总共可以跳n次。 楼梯共有m级(n=m ),每级有几种害虫,是青蛙吃得最多的害虫。

23 .移除由左括号和右括号组成的字符串,至少使其馀字符串合法(遵循左括号规则) )。

24.5实现选三

25 .要求从阵列中的后面数减去前面数之差的最大值,以尽可能降低时间、空间的复杂度

26 .合并多个有序数组

27 .多个有序排列交叉

28 .两个有序数组求差集

29 .字符串中最长不重复的子串

不足30.10万的回文数量

给定正整数x、y、x两个,有两种中状态转移方式。 一个是f(x(=2) x1,另一个是g (x )=3) x1。 询问x最少可以迁移到y几次,不能迁移到输出-1。

intfunc(intx,int y ) {

if(x0 )返回- 1;

if(xy )返回- 1;

if(x==y )返回0;

intL=func(2*x1,y );

intr=func(3*x1,y );

if(L==-1R==-1 )返回- 1;

if(l==-1 )返回r 1;

返回l 1;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。