Это можно решить с помощью жадного подхода.
Во-первых, обратите внимание, что начальные желаемые суммы также являются начальными различиями между требуемыми и заданными деньгами (потому что вы дали 0 каждому).Поэтому, для вашего примера, различия начинаются с [5, 4, 2, 2].
Во-вторых, обратите внимание, что предоставление денег любому лицу, кроме того, кто имеет максимальную разницу в данный момент времени, не 'уменьшить максимальную разницу.Например, если массив равен 5, 4, 2, 2, предоставление денег кому-либо, кроме первого лица, не уменьшит максимальную разницу: [5, 3, 2, 2], [5, 4, 1, 2], [5, 4, 2, 1] (максимальная разница остается на уровне 5).
Поэтому вы всегда должны отдавать одну монету человеку, который имеет максимальную разницу в данной точке (или любой изте, если есть галстук), пока у вас не кончатся монеты: [5, 4, 2, 2] -> [4, 4, 2, 2] -> [3, 4, 2, 2] -> [3, 3, 2, 2] -> [2, 3, 2, 2] -> [2, 2, 2, 2] и т. Д.
Конечно, при реализации алгоритма вы нена самом деле нужно отдавать монеты одну за другой, но это общее представление о том, что вы должны делать.