题解 | #最长无重复子数组#

最长无重复子数组

http://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4

使用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;
    }
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务