输入一个长度为n的序列,找到一个尽量长的连续子序列AI~Ar,使得该序列中没有相同元素。用C++语言实现
时间: 2024-02-26 12:57:50 浏览: 34
可以使用一种叫做滑动窗口的方法来实现。具体步骤如下:
1.定义一个哈希表,用来记录当前窗口中元素是否出现过。
2.定义两个指针 l 和 r,初始值都为 0,表示当前窗口的左右边界。
3.定义一个变量 res,用来记录最长连续子序列的长度。
4.当右指针 r 小于序列长度 n 时,执行以下操作:
4.1 如果当前元素没有出现过,则将其加入哈希表,并将右指针 r 向右移动一位。
4.2 如果当前元素已经出现过,则将左指针 l 向右移动一位,并从哈希表中删除对应的元素。
4.3 每次移动指针时,都更新 res 的值。
5.返回 res。
下面是具体的 C++ 代码实现:
```c++
#include <unordered_set>
#include <algorithm>
int longestConsecutiveSubsequence(vector<int>& nums) {
int n = nums.size();
unordered_set<int> s;
int l = 0, r = 0, res = 0;
while (r < n) {
if (s.count(nums[r]) == 0) {
s.insert(nums[r++]);
res = max(res, r - l);
} else {
s.erase(nums[l++]);
}
}
return res;
}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)