Я хотел бы получить верхние X элементов массива, которые суммируют, по крайней мере, до заданной суммы, не сортируя весь массив заранее по линейному времени. Я думаю, что невозможно получить линейное время во всех случаях, но, по крайней мере, в моих входных массивах у меня есть примерно 1% элементов, которые составляют 99% суммы. И мне нужно правильно их идентифицировать. Я не знаю, помогает ли это, но сумма всех элементов всегда равна 1.
Я уже реализовал это с отсортированным массивом, но это взрывает сложность моего алгоритма. Впоследствии я уже изучил алгоритм top-k и алгоритм рюкзака, но они не позволяют гибким элементам x зависеть от заданной минимальной суммы.
Input Array: [0.1, 0.2, 0.4, 0.05, 0.01, 0.01, 0.01, 0.02, 0.15, 0.05]
Example 1:
Given Sum: 0.8
Expected output [0.1, 0.2, 0.4, 0.15, ] --> Sum 0.85 but only top 4 elements
Example 2:
Given Sum: 0.95
Expected output [0.1, 0.2, 0.4, 0.15, 0.05, 0.05 ] --> Sum 0.95 but only top 6 elements
Очень жду ваших ответов!