/**
 * 
 * @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;
}