贡献法也可以用于解决本题。
思考每个元素对于 “互异元素数量” 的贡献。
假设我们当前关注的元素是 x,如果某个子数组包含了 x,那么它就会给该子数组的互异元素数量贡献 “1”,与该子数组总共所包含的 x 的数量无关。
由此可得,x 给最终答案的贡献 = 包含 x 的不同子数组的数量。
然而,我们难以直接统计满足该条件的子数组,因为有的子数组可能只包含了一个 x,有的包含了两个……
正难则反,可以计算出不包含 x 的子数组数量,然后用子数组的总数 (n + 1) * n / 2 减去它,得到实际的贡献值。
参考代码:
