262数组子序列的排列个数
题解
题目要求计算数组中满足特定条件的子序列数量。具体来说,子序列必须是从 1 到 m 的完整排列,且按升序排列。
解题思路
计数元素频次:
使用
Counter统计数组中每个元素出现的次数。这样可以快速获取每个数字出现的数量。迭代构建排列:
从
1开始,依次检查每个数字i是否存在于数组中(即cnt[i] > 0)。如果存在,当前排列长度为
i,可以选择的方式数为cnt[i]。将当前选择方式数累乘到一个累积变量
f中,表示构建长度为i的排列的总方式数。将
f加到最终结果res中。一旦发现某个数字
i在数组中不存在(即cnt[i] == 0),说明无法继续构建更长的排列,循环终止。
示例分析
以样例 1 为例:
数组
[1, 1, 5, 2, 3, 4]中元素计数为{1:2, 5:1, 2:1, 3:1, 4:1}。依次计算:
m=1:cnt[1] = 2→f = 2→res = 2m=2:cnt[2] = 1→f = 2 * 1 = 2→res = 4m=3:cnt[3] = 1→f = 2 * 1 * 1 = 2→res = 6m=4:cnt[4] = 1→f = 2 * 1 * 1 * 1 = 2→res = 8m=5:cnt[5] = 1→f = 2 * 1 * 1 * 1 * 1 = 2→res = 10m=6:cnt[6] = 0→ 终止
最终结果为
10。
代码
1 | |
复杂度分析
- 时间复杂度:
O(n),其中n是数组长度,用于统计元素频次。 - 空间复杂度:
O(n),用于存储元素频次。
262数组子序列的排列个数
https://kongshuilinhua.github.io/2024/12/30/262数组子序列的排列个数/