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

最长无重复子数组

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

/**
 * 
 * @param arr int整型一维数组 the array
 * @param arrLen int arr数组长度
 * @return int整型
 */
/***************************************************************
* 如何校验数字是否相同?如果以此循环遍历,那效率就太低了,可以尝试用新数组ret[100000]实现哈希
* 定义i为左窗口,初值为0,j为右窗口,初值也为0,右窗口向右移动
* 例如输入[2,2,3,4,3],ret[100000]新数组元素初值都为0,用数组标记每个数字出现的次数
* ret[arr[i]]==2时说明数字之前出现过,是重复的,那么用ret[arr[i]]--实现出窗口
* 一直将左窗口移动到重复数字右侧,j-i+1即为当前长度,如果比更新前大,则更新窗口长度,否则不更新
************************************************************************/
int maxLength(int* arr, int arrLen ) {
    // write code here
    if(arrLen == 0 || arrLen ==1)
        return arrLen;
    
    int ret[100000] = {0};
    int retLen = 0;
    
    for(int i=0, j=0; j < arrLen; j++)
    {
        ret[arr[j]]++;
        while(ret[arr[j]] > 1)//重复字符,将窗口移动到重复字符右侧
        {
            ret[arr[i]]--;
            i++;
        }
        if(j-i+1 > retLen)
            retLen = j-i+1;
    }
    return retLen;
}
全部评论

相关推荐

09-18 20:41
阿里巴巴_后端
要个offer怎么这...:哈哈哈哈哈哈,我也拿了0x10000000个offer,秋招温啦啦啦,好开心
我的秋招日记
点赞 评论 收藏
分享
09-22 09:42
门头沟学院 Java
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务