📅  最后修改于: 2023-12-03 14:55:23.180000             🧑  作者: Mango
在给定的数组中,找到由唯一元素组成的最长子数组并返回其长度。
例如:
input: [1,2,3,2,3,4,5,6,5]
output: 5
explanation: 最长的唯一元素子数组是 [4,5,6,5,6],长度为 5。
我们可以使用滑动窗口算法来解决这个问题。在滑动窗口算法中,我们维护一个窗口,该窗口始终包含唯一元素。
算法步骤:
def longest_unique_subarray(arr):
n = len(arr)
unique_set = set()
start, end = 0, 0
max_length = 0
while start < n and end < n:
if arr[end] not in unique_set:
unique_set.add(arr[end])
end += 1
max_length = max(max_length, end - start)
else:
unique_set.remove(arr[start])
start += 1
return max_length
本算法时间复杂度为 $O(n)$,空间复杂度为 $O(k)$,其中 $k$ 为数组中唯一元素的个数。因为我们最多需要记录 $k$ 个元素,每个元素最多出现 2 次(一次加入集合,一次删除集合),所以空间复杂度为 $O(k)$。
本文介绍了如何使用滑动窗口算法解决“最长子数组,由数组中的唯一元素组成”问题。通过维护一个集合来记录当前窗口内的唯一元素,我们可以在线性时间内解决这个问题。