[面试] 数据结构和算法

85 阅读1分钟

05 数据结构和算法

智力题

1. 一亿个数据取前topk个

  • 创建大小为 K 的大根堆,初始元素全为 0;
  • 遍历数据, 与堆顶元素比:
    • 小于堆顶元素则与堆顶元素交换,然后调整大根堆;
    • 大于堆顶元素则跳过,遍历下一个;
  • 复杂度 : NlogK (遍历 N, 调整 logK)

2. n 个学生成绩排序

  • 分数固定,采用计数排序;
  • 创建 0-100 数组 A;
  • 遍历学生成绩,统计每个分数的人数;
  • 对应分数的排名是比它高的分数人数之和再加一;
  • 复杂度 : 时间 N, 空间 100;

3. K 个有序链表的合并

  • 建立小根堆,将链表首元素加入堆中;
  • 弹出堆首元素到结果数组,然后将该元素对应的链表指针向后移动一位;
  • 将移动后指针指向的元素放入堆,再调整小根堆;
  • 复杂度 : nlogn