原題目連結
Lucky貓翻譯

題解

由大套小的特性來看,決定先排序;
如果能使排序後,索引大的可以只考慮套索引小的,會使問題單純很多。

於是依第一維小到大排序,
這樣我們就可以只考慮第二維的數字;
但我們必須避免第一維相同大小的娃娃互套。

於是第一維相同時,我們依第二維大到小排序。
這樣低索引中第一維相同大小的,第二維一定不會比自己小,一定套不了,
就可以迴避第一維相同大小的娃娃互套的問題,把題目壓成一維。

接下來我們觀察發現,每個娃娃盡量找大的套一定不會比較糟;
因為小的選擇比較多,能套大的一定能套小的,反之則未必。

對於每個娃娃,都去看目前沒被套的娃娃中,最接近自己但又比自己小的套上。
如果都套不上,就擺上目前沒被套的娃娃列中。

觀察會發現目前沒被套的娃娃,依這邏輯每次覆蓋都會讓娃娃大小增加;
覆蓋不了則會被放到最後端變成新的沒被套的娃娃,
則娃娃會維持大小不遞減的關係,因此我們可以對沒被套的娃娃們二分搜尋比自己小的中,最大的那一隻。

排序的複雜度 n log n,
每隻娃娃找到能套的最大娃娃,總共也是 n log n

Time: 0.040, Rank: 94/447

來自小希的提醒