解法一 排序
- 排序的参数的就是每一行的和
- index和每一行的和的对应关系( f = sum(data[i]) )
- 然后取前k个数
注意点
- lambda表达式本质上就是一个匿名函数
解法二 top k问题解法 使用heapq
- 遍历list, 将index和sum(data[index]),使用set集合
- 放入到heapq中,如果长度大于k了, 就pop
注意点
- heapq,pop的时候pop的最小的,求最小的,需要pop最大的,此时需要使用复数
- 取值的时候使用nlargest函数
解法三 二分法 + 最大堆
- 在sum中需要遍历求和,此时可以使用二分法进行求和
- 因为有个条件是1总是在0的前面
注意点
最大堆和最小堆的概念
- 最大堆
- 概念: 根节点的值最大
- 应用: 计算top k 最小的节点
- 最小堆
- 概念: 根节点的值最小
- 应用: 计算top k 最大的节点
网友评论