Leecode刷题C语言之完成所有交易的初始最少钱数
执行结果:通过
执行用时和内存消耗如下:
long long minimumMoney(int** transactions, int transactionsSize,
int* transactionsColSize) {
long long total_lose = 0;
int res = 0;
for (int i = 0; i < transactionsSize; i++) {
int cost = transactions[i][0];
int cashback = transactions[i][1];
if (cost > cashback) {
total_lose += (cost - cashback);
}
if (cashback < cost) {
if (cashback > res) {
res = cashback;
}
} else {
if (cost > res) {
res = cost;
}
}
}
return total_lose + res;
}
解题思路:
该代码的目的是计算一系列交易中的最小损失金额加上一个特定的返现金额或交易成本,具体思路如下:
- 初始化变量:
total_lose
:用于累加所有亏损的交易金额(即交易成本大于返现金额的部分)。res
:用于记录一个特定的值,初始化为0。这个值最终会是所有交易中最大的返现金额(如果返现金额小于成本)或者最大的交易成本(如果返现金额不小于成本)。
- 遍历交易:
- 通过一个循环遍历所有交易,每个交易由一个包含两个整数的数组表示,第一个整数是交易成本(
cost
),第二个整数是返现金额(cashback
)。
- 通过一个循环遍历所有交易,每个交易由一个包含两个整数的数组表示,第一个整数是交易成本(
- 计算亏损:
- 对于每一笔交易,如果交易成本大于返现金额(
cost > cashback
),则计算亏损金额(cost - cashback
)并累加到total_lose
中。
- 对于每一笔交易,如果交易成本大于返现金额(
- 更新
res
的值:- 如果返现金额小于交易成本(
cashback < cost
),则检查当前返现金额是否大于res
,如果是,则更新res
为当前返现金额。 - 如果返现金额不小于交易成本(
cashback >= cost
),则检查当前交易成本是否大于res
,如果是,则更新res
为当前交易成本。
- 如果返现金额小于交易成本(
- 返回结果:
- 最终返回
total_lose + res
,即所有交易的亏损总额加上res
记录的那个特定值。
- 最终返回
逻辑分析:
total_lose
累计了所有“亏钱”的交易,即那些你支付的比返现更多的交易。res
记录了一个“参照值”,这个值在遍历所有交易后,会是以下两种情况中的最大值:- 所有返现金额中的最大值(如果返现金额小于交易成本)。
- 所有交易成本中的最大值(如果返现金额不小于交易成本)。
用途:
- 该函数可能用于评估一系列交易的总损失(因支付超过返现而亏损的金额)加上一个“安全垫”(即最大的返现金额或交易成本,作为某种形式的准备金或基准参考)。
改进建议:
- 变量命名可以更直观一些,例如将
res
改为maxRefundOrCost
可能会更清楚地表达其含义。 - 注释的添加可以帮助其他开发者更快地理解代码的逻辑和目的。