Leetcode2412:完成所有交易的初始最少钱数

题目描述:

给你一个下标从 0 开始的二维整数数组 transactions,其中transactions[i] = [costi, cashbacki]

数组描述了若干笔交易。其中每笔交易必须以 某种顺序 恰好完成一次。在任意一个时刻,你有一定数目的钱 money ,为了完成交易 imoney >= costi 这个条件必须为真。执行交易后,你的钱数 money 变成 money - costi + cashbacki

请你返回 任意一种 交易顺序下,你都能完成所有交易的最少钱数money 是多少。

代码思路:

  1. 初始化变量
    • n:交易记录的总数。
    • lossMax:这个变量在代码中实际上没有使用,可能是原设计中的一个遗留或误解。根据题目,我们不需要记录最大的亏损额。
    • profitMax:用于记录在所有亏损交易中(即costi > cashbacki),最大的costi值。这个值在后续计算中用来评估,如果所有交易都要进行,且我们需要通过某种方式"回补"亏损时,可能需要的最大初始资金。
    • lossSum:实际上记录的是所有盈利交易(costi < cashbacki)转化为亏损后的总和(即cashbacki - costi的相反数,但在这里直接累加了costi - cashbacki,表示需要额外补充的资金)。这个值代表了如果直接按顺序进行交易,我们需要额外多少资金来填补这些"亏损"。
    • lossBackMax:记录所有盈利交易中的最大cashbacki值。这个值用于评估,如果所有交易都要进行,且我们需要通过最大盈利来"回补"亏损时,可能得到的最大金额。
  2. 遍历交易记录
    • 对于每个交易,检查costi是否小于cashbacki
      • 如果是(即交易是盈利的),则计算该交易导致的"亏损"(实际上是需要额外补充的资金),并将其加到lossSum上。同时,更新lossBackMax为当前遇到的最大cashbacki值。
      • 如果不是(即交易是亏损的),则更新profitMax为当前遇到的最大costi值。这是因为,如果我们要通过盈利来"回补"这个亏损,我们需要确保初始资金至少能覆盖这个最大的costi
  3. 计算最少初始资金
    • 最后,我们有两种策略来计算所需的最少初始资金:
      • 使用所有盈利交易的总和(即lossSum,但实际上是亏损的总和,表示需要额外补充的资金)加上最大亏损交易的买入价(profitMax),这表示我们直接用初始资金覆盖最大亏损,然后用盈利来填补其他亏损。
      • 或者,使用所有盈利交易的总和(lossSum)加上最大盈利交易的卖出价(lossBackMax),这表示我们尝试用盈利来"回补"部分或全部亏损,然后用初始资金来覆盖剩余的部分。
    • 我们取这两种策略中的较大值作为结果,因为题目要求的是"任意一种交易顺序下,你都能完成所有交易的最少钱数"。这意味着我们需要考虑最坏情况下所需的资金。

代码实现:

复制代码
class Solution:
    def minimumMoney(self, transactions: List[List[int]]) -> int:
        n = len(transactions)
        lossMax = profitMax = lossSum = lossBackMax = 0
        for i in range(0, n, 1):
            if transactions[i][0] - transactions[i][1] < 0 :
                profitMax = max(profitMax, transactions[i][0])
            else:
                lossBackMax = max(lossBackMax, transactions[i][1])
                lossSum += transactions[i][0] - transactions[i][1]
        return max(lossSum + profitMax, lossSum + lossBackMax)
相关推荐
高亦真14 分钟前
今天是学习嵌入式的第37天
linux·学习·算法
不会就选b1 小时前
数据结构之排序
数据结构
罗西的思考2 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 --- (2)--- 训练
人工智能·算法·机器学习
深圳市方中禾科技3 小时前
FZH1625 LCD 驱动芯片深度评测与实战指南
算法·led
我不会起名字3224 小时前
一天一道算法题(34):回溯法的经典例题(子集)
java·数据结构·python·算法·golang·深度优先·力扣
huang5791476 小时前
哈希算法的抗碰撞机制与安全性增强策略4
算法
林浩杨_6 小时前
SIGIR 2026|南京大学:Video-GAR:“通过生成 Query 来验证视频语义理解”的生成增强范式
论文阅读·人工智能·算法
Logic1016 小时前
C语言/数据结构位运算题解:异或XOR找出货船中的“独特载货量“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
Elsa️7466 小时前
算法一周刷题总结
c++·算法
小小程序猴17 小时前
深圳乘路资讯AI培训怎么样?课程靠谱吗?——一套课程可信度评估模型与实证分析
人工智能·算法