05 数据结构和算法
智力题
1. 一亿个数据取前topk个
- 创建大小为 K 的大根堆,初始元素全为 0;
- 遍历数据, 与堆顶元素比:
- 小于堆顶元素则与堆顶元素交换,然后调整大根堆;
- 大于堆顶元素则跳过,遍历下一个;
- 复杂度 : NlogK (遍历 N, 调整 logK)
2. n 个学生成绩排序
- 分数固定,采用计数排序;
- 创建 0-100 数组 A;
- 遍历学生成绩,统计每个分数的人数;
- 对应分数的排名是比它高的分数人数之和再加一;
- 复杂度 : 时间 N, 空间 100;
3. K 个有序链表的合并
- 建立小根堆,将链表首元素加入堆中;
- 弹出堆首元素到结果数组,然后将该元素对应的链表指针向后移动一位;
- 将移动后指针指向的元素放入堆,再调整小根堆;
- 复杂度 : nlogn