题解 | #最长无重复子数组#
最长无重复子数组
https://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4?tpId=295&tqId=1008889&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj
C语言
int maxLength(int* arr, int arrLen ) { // write code here int* hash = (int*)calloc(100001, sizeof(int)); memset(hash, 0, sizeof(int)*100001); // int hash[9] = {0}; //本地测试使用 int left = 0, right = 1; //左右索引 int maxLen = 1; //最大长度,初始为1,即左索引 hash[arr[left]] = 1; //初始左索引已使用 while(right < arrLen){ //右索引循环至数组最后 if(hash[arr[right]] == 0){ //判断右索引的值是否未使用 hash[arr[right]] = 1; //修改为已使用 maxLen = (maxLen > (right - left + 1) ? maxLen : (right - left + 1)); //更新最大长度 }else{ //如果已使用,则需要左索引不断向右移动直到找到重复的值 while(arr[left] != arr[right]){ //如果左索引的值不为重复值, hash[arr[left]] = 0; //将左索引当前值修改为未使用 left++; //左索引向右移动 } left++; //左索引指向重复值的右边 } right++; //右索引移动 } free(hash); return maxLen; }