最长无重复子数组哈希表解题
时间: 2023-08-15 09:33:02 浏览: 108
最长无重复子数组问题可以用哈希表来解决。具体思路如下:
1. 定义一个哈希表,用于记录每个元素最后一次出现的位置。
2. 定义两个指针i和j,分别指向子数组的起始位置和结束位置。
3. 遍历数组,对于每个元素num,如果其不在哈希表中,或者其在哈希表中的位置小于i,则更新哈希表中num的位置为当前位置。
4. 如果num在哈希表中,并且其在哈希表中的位置大于等于i,则更新i为num在哈希表中的位置加1。
5. 在每次更新i和j后,计算当前子数组的长度,并与之前的最大长度进行比较,更新最大长度。
6. 最终得到的最大长度即为所求。
下面是Python代码实现:
```python
def longest_subarray(nums):
max_len = 0
hash_table = {}
i = 0
for j in range(len(nums)):
if nums[j] not in hash_table or hash_table[nums[j]] < i:
hash_table[nums[j]] = j
else:
i = hash_table[nums[j]] + 1
hash_table[nums[j]] = j
max_len = max(max_len, j - i + 1)
return max_len
```
该算法的时间复杂度为O(n),空间复杂度为O(n)。
阅读全文