for (int i = 0; i < n; i++) for (int j = 0; j <= i; j++) if (check(v1, j, i)) res = max(res, i - j + 1); // 检查 [l, r] 区间上有无重复元素 boolcheck(vector<int>& v1, int l, int r) { for (int i = l + 1; i <= r; i++) for (int j = l; j < i; j++) if (v1[i] == v1[j]) returntrue; returnfalse; }
换用双指针(有点hashmap的感觉):
1 2 3 4 5 6 7
for (int i = 0, j = 0; i < n; i++) { s[a[i]]++; // a[i]出现的次数(标记)加一 while (j < i && s[a[i]] > 1) s[a[j++]]--; // 如果存在重复元素 标记减一 j 右移 res = max(res, i - j + 1); }