ac_799最长连续不重复子序列
题目描述
题目大意&链接
给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。
输入输出样例:
输入:
5
1 2 2 3 5
输出:
3
解题思路
这题采用双指针的思想,具体:
- 采用 map 哈希表存储数列中个元素出现的次数,i 指针往后移动,当 mp[a[i]] > 1 时,表示前面有重复元素,此时将 j 指针后移一位并 mp[a[j]]– :
map<int, int> mp;
...
mp[a[i]]++;
while(mp[a[i]] > 1)
{
mp[a[j]]--;
j++;
} - res 记录最长连续不重复子序列:
res = max(res, i - j + 1);
完整代码
|
时间和空间复杂度
时间复杂度:O(nlogn) map 基于红黑树实现,单次操作时间为 O(logn),数组存储的话就是 O(n);
空间复杂度:O(n)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ZW_Blog!