使用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; } };