C/C++——排列算法
这让我想起了单调队列优化,可以将所有小球当作一个有序链表,如果已经放了一个小球,直接用链表的删除操作删除对应节点,而删除操作是不增加时间复杂度的。想法可行,直接开始优化。(排列数)输入两个正整数 𝑛,𝑚(1≤𝑛≤20,1≤𝑚≤𝑛)n,m(1≤n≤20,1≤m≤n),在 1∼𝑛1∼n 中任取 𝑚m 个数,按字典序从小到大输出所有这样的排列。上面的算法时间复杂度会变成O(nm)是因为在我已经选择了一个小球也就是选择了一个编号之后,我并没有将其剔出待选集,也就少了一个筛选操作,这其实并没有对整个过程的正确模拟。
原创
2024-05-23 17:21:25 ·
632 阅读 ·
0 评论