long long minimumMoney(int** transactions, int transactionsSize, int* transactionsColSize) {
long long totalLoss = 0; // 所有亏损交易的总亏损
int maxMin = 0; // 所有交易中 min(cost, cashback) 的最大值
for (int i = 0; i cashback) {
totalLoss += cost - cashback;
}
// 更新 max(min(cost, cashback))
int minVal = cost maxMin) {
maxMin = minVal;
}
}
return totalLoss + maxMin;
}
代码说明
1. 函数签名:long long minimumMoney(int** transactions, int transactionsSize, int* transactionsColSize)
- 这是 LeetCode C 语言题目的标准接口
- transactions 是二维数组
- transactionsSize 是交易数量
- transactionsColSize 是每行的列数(本题固定为 2)
2. 核心逻辑:
- totalLoss 用 long long 类型,防止溢出(cost 和 cashback 最大可达 10^9,累加可能超过 int 范围)
- 遍历每一笔交易,累加亏损交易的总亏损,同时记录 min(cost, cashback) 的最大值
- 最终返回 totalLoss + maxMin
3. 与 Java 版本的区别:
- C 语言没有 Math.max 和 Math.min,使用三元运算符替代
- 需要手动管理数组索引
复杂度分析
- 时间复杂度:O(n),只需一次遍历
- 空间复杂度:O(1),只使用常数个变量