牛客:最长无重复子数组
牛客:最长无重复子数组
- 题目
- 思路
- 代码
题目
给定一个长度为n的数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。
子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组
思路
这道题的思路其实是很简单的我们只需要解决一个问题就可以了也就是如何判断是否有元素重复。虽然是问题但是也很好解决使用哈希表即可。所以整体的思路就是我们使用一个循环确定第一个数然后在里面嵌套一个循环来插入不重复的元素到数组中。在遇到重复的元素或者没有元素的时候退出即可然后判断数组的大小是否大于length(length是我们定义的一个整数来存储最长的数组大小)。之后再将哈希表和数组清空继续第一层循环即可。
代码
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param arr int整型vector the array* @return int整型*/int maxLength(vector<int>& arr) {// write code herevector<int> res;int length = 0;unordered_set<int> us;//第一层循环//确定第一个数for(int i = 0 ;i < arr.size();i++){res.push_back(arr[i]);us.insert(arr[i]);int j = i+1;//直到遇到重复的元素或者没有元素while(!us.count(arr[j]) && j < arr.size()){res.push_back(arr[j]);us.insert(arr[j]);j++;}if(res.size() > length){length = res.size();}us.clear();res.clear();}return length;}
};