复试常见算法

1、给定随机100位数,求中位数?

(1)构造一维数组,并从小到大排序,若为偶数100,取中间的两位数的平均数,若为奇数101,则直接取中间的元素

(2)numpy.median()

2、sn次方求解有哪几种方法?

(1)递归方法:在求一个数sn次幂时,可分为奇数和偶数两种情况

若为奇数:x^n=x^(n-1)/2 * x^(n-1)/2 * x

若为偶数:x^n=x^n/2 * x^n/2

n==0,则任何数的0次幂等于1

n==1,则任何数的1次幂等于本身

(2)非递归方法:将n次幂转换为二进制的形式

(3)直接调用库函数pow

3、给一组数据排序,说出三种取前十个数?

(1)假设排序是从大到小排序,即取出前十个数是序列中最大的10个(Topk问题),将输入的内容进行完全拍讯,从中直接选择出前K个元素,例如快排logn

(2)对数据进行部分排序,即只对前K大的元素进行排序,此时我们选择冒泡排序或选择排序进行处理,即每次冒泡都得到一个所求元素okn

(3)对数据不进行排序,这种策略将会有更加好的性能开销。例如利用快排的分割函数位置K,则其前面的内容即为所求。时间复杂度O(n)(要全部加载到内存);还可以维护大小为K的小根堆,目前该小根堆中的元素时排名前K的数(不需要全部加载到内存)

4、合并k个有序数组(假设升序)

1)将k个数组的第一个元素取出,维护一个小顶堆

2)堆顶元素并存在结果数组中,并把该元素所在数组的下一个下一个元素取出来压入队列

3)调整堆的结构,使其满足小顶堆的定义

4)重复23步骤知道合并完成

5、合并两个无序链表称为一个有序链表,只能用常数空间:归并的思想,用快慢指针不断二分链表

6、二维数组的查找:行和列都有序时,每次都把要查找的元素和当前剩下的二维数组的右上角数字比较,不对就删除一行或一列

 

topk问题:

https://blog.csdn.net/zyq522376829/article/details/47686867?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

 

posted @ 2020-04-28 15:43  TOWERB  阅读(475)  评论(0编辑  收藏  举报