我有一个雇主应付的总金额,这个金额需要在员工之间分配。
例如
a $100
b $200
c -$200
d -$200
e $500
应付总额是所有项目的总和,在这种情况下为 400 美元
问题是我必须调用第 3 方系统来一一分配这些金额。但我不能让余额在分配期间低于 0 美元或高于总金额(400 美元)。
因此,如果我按上述顺序插入 a、b、c 将起作用,因此当前分配的总和 = 100 + 200 - 200 = 100 美元。但是,当我尝试分配 d。系统将尝试添加 -$200,这将使当前分配的金额 -$100 小于 $0,这是不允许的,因此将被系统拒绝。
如果我对列表进行排序,那么负面项目排在最后。IE
a $100
b $200
e $500
c -$200
d -$200
a 会起作用,b 会起作用,但是当它尝试插入 e 时会出现资金不足错误,因为我们已经超过了 $400 的最大值。我已经意识到没有灵丹妙药,总会有一些场景会破裂。但是,我想提出一个在大多数情况下都可以使用的解决方案。
正常的数据样本将包含 5 - 100 个项目。只有 2-15% 的人含有负数。
有没有一种聪明的方法可以对列表进行排序?还是尝试多次分配会更好。例如,将正面和负面分成两个列表。插入正数直到一个错误,然后插入负数直到它出错,然后在列表之间来回切换,直到它全部分配或直到它们都出错。