题解 | 最长无重复子数组
最长无重复子数组
https://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4
#include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param arr int整型vector the array * @return int整型 */ int maxLength(vector<int>& arr) { // write code here unordered_map<int, int> lastSeen; // 记录每个数字最后出现的位置 int maxLen = 0; int start = 0; // 当前无重复子数组的起始位置 for (int end = 0; end < arr.size(); end++) { // 如果当前数字已经出现过,并且上次出现的位置在当前窗口内 if (lastSeen.count(arr[end]) && lastSeen[arr[end]] >= start) { // 移动start到重复数字的下一个位置 start = lastSeen[arr[end]] + 1; } // 更新当前数字的最后出现位置 lastSeen[arr[end]] = end; // 计算当前窗口长度并更新最大值 maxLen = max(maxLen, end - start + 1); } return maxLen; } };