面试常见算法总结

这篇博客汇总了面试中常见的算法问题,包括top k问题的解决策略,海量数据的top k和频率统计,以及一系列如中位数、逆序对、树的子结构等剑指offer题目,还涉及字符串、链表、二叉树等操作,同时涵盖了动态规划和递归的应用,如寻找从二叉树到目标节点的最短路径问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里是我在网上搜索的一些面试常见算法,总结一下,利人利己。

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 问题:

比如在一亿(N)个数中选取最大的10000(m)个,这时候要分情况讨论,如果说内存不足的话,那么可以采用建立一个m最小堆,然后遍历N个数,如果大于堆顶则插入。

如果内存足够的情况,可以直接采用快速排序方法,可以借助分治法,比如把N个数分为100份数,分别找出100个最大的10000,然后最后在100万中找10000个最大的。

选取频率最高问题

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

方案:顺序读文件中,对于每个词x,取hash(x)%5000,然后按照该值存到5000个小文件(记为x

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值