LeetCode每日一题4.24
2799. 统计完全子数组的数目
题目
问题分析
完全子数组 的定义:子数组中不同元素的数目等于整个数组不同元素的数目。
子数组 是数组中的一个连续非空序列。
思路
统计整个数组的不同元素数目:
使用 set 来获取整个数组的不同元素数目。
遍历所有子数组:
使用双指针或滑动窗口的方法来遍历所有可能的子数组。
检查每个子数组是否为完全子数组:
对于每个子数组,检查其不同元素的数目是否等于整个数组的不同元素数目。
计数完全子数组的数量:
如果某个子数组满足条件,则计数器加一。
代码
class Solution:def countCompleteSubarrays(self, nums: List[int]) -> int:# 获取整个数组的不同元素数目total_unique = len(set(nums))n = len(nums)count = 0# 遍历所有子数组for start in range(n):unique_elements = set()for end in range(start, n):unique_elements.add(nums[end])# 检查当前子数组是否为完全子数组if len(unique_elements) == total_unique:count += 1return count
复杂度分析
时间复杂度
该算法的时间复杂度为 (O(n^2)),其中 (n) 是数组的长度。这是因为我们需要遍历所有可能的子数组。
空间复杂度
空间复杂度为 (O(n)),因为在最坏情况下,unique_elements 集合的大小可能达到 (n)。
学习
total_unique: 整个数组的不同元素数目。
unique_elements: 当前子数组的不同元素集合。
count: 完全子数组的数量。
获取整个数组的不同元素数目:通过 set(nums) 获取并计算不同元素的数量。
遍历所有子数组:使用两层循环来生成所有可能的子数组。
检查每个子数组是否为完全子数组:对于每个子数组,检查其不同元素的数量是否等于整个数组的不同元素数量。
计数完全子数组的数量:如果某个子数组满足条件,则计数器加一。