解题思路
我们需要构造一个 1 到 n 的排列,使得它的逆序对总数(混乱度)恰好等于 k。
最大可能的逆序对数为 2n(n−1),题目保证给出的 k 在合法范围内。
可以采用贪心策略从大到小放置数字。设当前剩余未使用的数字集合为 {1,2,…,s}(s 初始为 n)。
- 如果我们将剩余数字中的最大值 s 放在当前答案序列的下一个位置,由于它比后面所有 s−1 个数字都大,因此会与它们形成 s−1 个逆序对。
- 贪心思路:只要当前还需要构造的逆序对数 k≥s−1 且 s>1,就将 s 放入答案,令 k←k−(s−1),并缩减剩余集合 s←s−1,继续尝试放入下一个最大值。