使用unordered_set来保存目前已经存在的数,使用vector来保存目前已经存在的数并且保持有序的状态。
若能够在集合中找到当前欲插入的数,则先将集合中的这个数删除并且需要将vector中该数之前的数都删除,以及需要将这些数都从集合中删除。再将当前的数插入到集合以及vector中。
class Solution {
public:
/**
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr) {
// write code here
unordered_set<int> m_set;
vector<int> m_vec;
int max_len = 0;
for(int i=0;i<arr.size();i++)
{
//如果元素重复;
unordered_set<int>::iterator iter = m_set.find(arr[i]);
if(iter != m_set.end())
{
m_set.erase(iter);
//删除vector中arr[i]之前的所有元素;
vector<int>::iterator it = m_vec.begin();
while(*it != arr[i])
{
m_set.erase(*it);
it=m_vec.erase(it++);
}
//删除vecotr中arr[i]的元素;
it=m_vec.erase(it++);
}
//将当前元素插入到集合以及vector中;
m_set.insert(arr[i]);
m_vec.push_back(arr[i]);
//更新最大的长度;
if(max_len < m_vec.size())
max_len = m_vec.size();
}
return max_len;
}
};
京公网安备 11010502036488号