列表

详情


BM92. 最长无重复子数组

描述

给定一个长度为n的数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。
子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组

数据范围:

示例1

输入:

[2,3,4,5]

输出:

4

说明:

[2,3,4,5]是最长子数组

示例2

输入:

[2,2,3,4,3]

输出:

3

说明:

[2,3,4]是最长子数组

示例3

输入:

[9]

输出:

1

示例4

输入:

[1,2,3,1,2,3,2,2]

输出:

3

说明:

最长子数组为[1,2,3]

示例5

输入:

[2,2,3,4,8,99,3]

输出:

5

说明:

最长子数组为[2,3,4,8,99]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 10ms, 内存消耗: 3108KB, 提交时间: 2021-09-09

static const auto io_sync_off=[]()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    return nullptr;
}();
class Solution {
public:
    /**
     * 
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxLength(vector<int>& arr) 
  {
        if(arr.size()<2)
        {
            return arr.size();
        }
        vector<int>v(100000);
        int res=0;
        int left=0;
        int right=0;
        while(right<arr.size())
        {
            if(v[arr[right]]==0)
            {
                v[arr[right]]=1;
                res=max(res,right-left+1);
                right++;
            }
            else
            {
                v[arr[left]]=0;
                left++;
            }
        }
        return res;
  }
};

C++ 解法, 执行用时: 10ms, 内存消耗: 3224KB, 提交时间: 2021-09-15

static const auto io_sync_off=[]()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    return nullptr;
}();
class Solution {
public:
    /**
     *
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxLength(vector<int>& arr)
  {
        if(arr.size()<2)
        {
            return arr.size();
        }
        vector<int>v(100000);
        int res=0;
        int left=0;
        int right=0;
        while(right<arr.size())
        {
            if(v[arr[right]]==0)
            {
                v[arr[right]]=1;
                res=max(res,right-left+1);
                right++;
            }
            else
            {
                v[arr[left]]=0;
                left++;
            }
        }
        return res;
  }
};

C++ 解法, 执行用时: 10ms, 内存消耗: 3236KB, 提交时间: 2021-09-19

static const auto io_sync_off = [](){
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    return nullptr;
}();
class Solution {
public:
    /**
     * 
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxLength(vector<int>& arr) {
        // write code here
        if(arr.size() < 2){
            return arr.size();
        }
        vector<int> v(100000);
        int res = 0;
        int right = 0;
        int left = 0;
        
        while(right<arr.size()){
            if(v[arr[right]]==0){ //子序列无重复判断
                v[arr[right]] = 1;
                res = max(res,(right-left+1));
                ++right;
            }else{
                v[arr[left]] = 0;
                ++left;
            }
        }
        return res;
    }
};

C++ 解法, 执行用时: 10ms, 内存消耗: 3344KB, 提交时间: 2021-07-03

static const auto io_sync_off = []()
{
    // turn off sync
    std::ios::sync_with_stdio(false);
    // untie in/out streams
    std::cin.tie(nullptr);
    return nullptr;
}();
class Solution {
public:
    /**
     *
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxLength(vector<int>& arr) {
        // write code here
        if(arr.size()==0) return 0;
        vector<int> v(100000);
        int res=0;
        int i=0;
        int j=0;
        while(j<arr.size()){
            if(v[arr[j]]==0){
                v[arr[j]]=1;
                res=max(res,j-i+1);
                j++;
            }else{
                v[arr[i]]=0;
                i++;
            }
        }
        return res;
    }
};

C++ 解法, 执行用时: 11ms, 内存消耗: 3124KB, 提交时间: 2021-08-18

static const auto io_sync_off = []()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    return nullptr;
}();
class Solution {
public:
    /**
     * 
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxLength(vector<int>& arr) {
        // write code here//试试为啥我的跑20多ms 他们这个跑10ms,得多学习
        if(arr.size()==0) return 0;
        vector<int> v(100000);//先创建一个vector容器,指定元素个数及初始化为0;
        int res=0;
        int i=0;
        int j=0;
        while(j<arr.size())
        {
            if(v[arr[j]]==0)
            {
                v[arr[j]]=1;
                res=max(res,j-i+1);
                j++;
            }
            else
            {
                v[arr[i]]=0;
                i++;
            }
        }
        return res;
    }
};

上一题