思路:双指针/滑动窗口
分析:我们固定一段区间 (i, j),记录该区间内所有数组元素的出现次数。每次 j++,并将其对应的数组元素对应次数加1,若该元素出现次数大于1,说明之前出现过,则左指针右移:i++,直到满足所有元素出现次数都等于1,此时(i, j) 区间为一个满足条件的子串,更新最大子串长度即可。
代码如下:
class Solution { public: /** * * @param arr int整型vector the array * @return int整型 */ int maxLength(vector<int>& arr) { // write code here int ans = 1, cur = 1, i = 0, j = 0; int n = arr.size(); unordered_map<int, int> mp; while(j < n) { mp[arr[j]]++; while(mp[arr[j]] > 1) { mp[arr[i]]--; i++; } ans = max(ans, j - i + 1); j++; } return ans; } };
全部评论
(0) 回帖