class Solution {
public:
/**
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr) {
// write code here
int result = 0;
int i = 0;
int size = 6;
size = arr.size();
int arr1[9999999]{0};
int temp = 0;
int ta = -1;
for(auto a : arr){
if(arr1[a] == 0){
arr1[a] += 1;//出现了加一
result++;//如果时没出现过的数result加一
if(temp<result)//为了保证最大连续次数不被覆盖
temp = result;
}
else if(arr1[a]++ >= 1){
if(result>1510){
cout << a<<"= "<<ta<<endl;
cout << "1 "<<arr1[a]<<endl;}
if(arr1[a]>2){//在计数时有相同数字间断出现3次或以上的直接把result和出现次数都置一
arr1[a] = 1;
result = 1;
}
if(a == ta)//如果连续出现两次同样的数字result置一
{
arr1[a] = 1;
result = 1;
}
else//没有连续出现两次,result不作变动等于把第一个重复去掉
result+=0;
}
ta = a;
}
if(temp>result)
return temp;
else
return result;
}
};
2
class Solution {
public:
/**
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr) {
// write code here
if(arr.size()==1){
return 1;
}
unordered_map<int, int> arr1;
int pre = arr[1];
int tail = arr[0];
int big=1;
int small=0;
int result=0;
for(int i = 1; i < arr.size() ; i++){
big = i;
pre = arr[big];
while(pre == tail&&small<big){
tail = arr[++small];
}
if(arr1[arr[i]]==0)//一次没出现过的数记录一下
arr1[arr[i]]=1;
else{//发现了出现过的数,找到它
arr1[arr[i]]=0;
while(arr[i] != tail&&small<big){
tail = arr[++small];
}
}
while(pre == tail&&small<big){
tail = arr[++small];
}
int temp = big - small + 1;
if(temp>result){
result = temp;
}
cout<<"1- "<<big<<" 2- "<<small<<endl;
}
return result;
}
};
我写的这两个都在第九组错了,不清楚为什么。记一下
这个才是对的
class Solution {
public:
int lengthOfLongestSubstring(string s) {
// write code here
unordered_map<int, int> mp;
int res = 0;
//设置窗口左右边界
for(int left = 0, right = 0; right < s.size(); right++){
//窗口右移进入哈希表统计出现次数
mp[s[right]]++;
//出现次数大于1,则窗口内有重复
while(mp[s[right]] > 1)
//窗口左移,同时减去该数字的出现次数
mp[s[left++]]--;//左移到与s[right]相同的字符时s[right]会减一来跳出while
//维护子数组长度最大值
res = max(res, right - left + 1);
}
return res;
}
};