That TED 4am video was entertaining but weird. Normally I think of TED video as educational / inspiring but that was a bit random.
I like your rename of "greedy" to "collectAll".
The code is definitely easier to read with a remove and then an add, even if it internally does more work than my loop did. I actually considered that approach but I know how performance-contious the developers here are so I didn't do that. I hoped ArrayList had some sort of shift method but it doesn't.
By the way, you forgot to copy the code improvement I put in my patch to your existing logic that I told you about. At your comment: "// Insert as the first result and truncate at num.", you did an add then a remove, when you should do a remove then an add in order to avoid potentially needlessly expanding ArrayList's internal array.