给定长度为 n 的数组,需要统计所有元素互不相同的非空子数组数量。 核心做法是双指针滑动窗口 + 计数:
l、r 表示当前窗口 [l, r],并维护每个数在窗口中的出现次数(可用数组或哈希表,因数据范围 1 ≤ a[i] ≤ n,用数组更高效)。r 逐步右移并加入元素;如果某个元素出现次数变为 2(产生重复),就不断移动左指针 l 并减少对应计数,直到窗口内再次全为互异元素。r 为右端时,所有满足条件且以 r 结尾的子数组个数正是窗口长度 r - l + 1,累加到答案即可。给定一个长度为 n 的数组 {a1,a2,...,an},请你计算其中所有子数组中,元素互不相同的子数组个数。
子数组指从原数组中连续选择的一段元素所形成的数组,要求非空。