题解 | #最高售价的两只牛#

最高售价的两只牛

https://www.nowcoder.com/practice/8e4a09d5f63d4298a8507decf5d12490

  • 题目考察的知识点 : 贪心算法
  • 题目解答方法的文字分析:
  1. 创建一个最小堆 minHeap,用于存储每个牛对的负总价值,并保持它们按照降序排列。因为 Python 的默认是最小堆,所以在加入时将其取负号。
  2. 对于列表 pricesA 中的每个元素和列表 pricesB 中的每个元素进行组合,并计算其总价值。将每个牛对和其总价值添加到最小堆 minHeap 中。因为我们要找到最大利润的前 k 对牛,所以在插入最小堆时可以用负数代替正数。
  3. 从 minHeap 中弹出当前总价值最大的前 k 对牛,并将它们添加到结果列表 res 中。由于 minHeap 中保存的是负数,因此在弹出元素时需要先将它们取负号
  • 本题解析所用的编程语言: Python
  • 完整且正确的编程代码

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param pricesA int整型一维数组
# @param pricesB int整型一维数组
# @param k int整型
# @return int整型二维数组
#
import heapq
class Solution:
    def kPairsWithLargestSums(
        self, pricesA: List[int], pricesB: List[int], k: int
    ) -> List[List[int]]:
        m, n = len(pricesA), len(pricesB)
        minHeap = [] # 维护当前总价格最大的k对牛(最小堆)

        # 将A牛的价格和B牛的价格两两组合,并计算每对牛的总价格,然后将其加入minHeap(按总价格升序排序)
        for i in range(m):
            for j in range(n):
                heapq.heappush(minHeap, (-(pricesA[i] + pricesB[j]), -pricesA[i], -pricesB[j]))

        # 从minHeap中选择当前总价格最大的牛对,并将其加入res
        res = []
        count = 0
        while minHeap and count < k:
            _, priceA, priceB = heapq.heappop(minHeap)
            res.append([-priceA, -priceB])
            count += 1

        return res
牛客高频top202题解系列 文章被收录于专栏

记录刷牛客高频202题的解法思路

全部评论

相关推荐

07-14 13:37
重庆大学 C++
点赞 评论 收藏
分享
来个厂收我吧:首先,市场侧求职我不是很懂。 但是,如果hr把这份简历给我,我会觉得求职人不适合做产品经理。 问题点: 1,简历的字体格式不统一,排版不尽如人意 2,重点不突出,建议参考star法则写个人经历 3,印尼官方货币名称为印度尼西亚卢比(IDR),且GMV690000印尼盾换算为305人民币,总成交额不高。 4,右上角的意向职位在发给其他公司时记得删除。 5,你所有的经历都是新媒体运营,但是你要投市场营销岗位,jd和简历不匹配,建议用AI+提示词,参照多个jd改一下经历内容。 修改建议: 1,统一字体(中文:思源黑体或微软雅黑,英文数字:time new romans),在word中通过表格进行排版(b站学) 2,校招个人经历权重:实习经历=创业经历(大创另算)>项目经历>实训经历>校园经历 3,请将项目经历时间顺序改为倒序,最新的放最上方。 4,求职方向不同,简历文字描述侧重点也需要不同。
点赞 评论 收藏
分享
06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务