中级农民
- 积分
- 110
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2020-8-18
- 最后登录
- 1970-1-1
|
今天6题,mergek专题,每个题目都写了题解.
mergek问题总结
模版:
for 每个列表第一个成员入堆,
入堆可能需要(val, idx, list)作为一个元组入堆
出堆,while(minHeap)/while(len(minHeap)==len(lists))/....不同题目出堆条件不一样
Pop
加入结果集合
后继入堆(如果有)
Lc23 mergek升序链表
入堆,每个链表第一成员,(val, list) # val, 不需要入堆下标,因为可以通过list.next查找
出堆:pop,接入结果链表,链表指针后移,后继入堆(如果有)
特殊注意:链表问题需要建立dummy头结点
Lc378 有序矩阵第k小(非最优解)
入堆,每行第一个成员入堆,(val,idx,list)
出堆,pop,如果count==k,return number,else,后继入堆
Lc632 最小区间
入堆,每个list第一成员,(val,idx,list), 需要list确定成员所属列表,需要idx来寻找下一个位置
出堆: pop, 如果区间更小了则更新区间,后继入堆,更新currMax, |
 组图打开中,请稍候......
|