题解 | #最长无重复子数组#

最长无重复子数组

http://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4

java版——双指针



public class Solution {

    public int maxLength (int[] arr) {
        Set<Integer> set = new HashSet<>();
        int left = 0;
        int right = 0;
        int maxLen = -1;
        while(right < arr.length){
            // 扩大右指针,直到遇到重复元素
            while(right < arr.length && !set.contains(arr[right])){
                set.add(arr[right++]);
            }
            maxLen = Math.max(maxLen, right - left);
            if(right >= arr.length){
                break;
            }
            // 收缩左指针,直到重复元素被移出窗口
            while(left < right && arr[left] != arr[right]){
                set.remove(arr[left++]);
            }
            set.remove(arr[left++]);
        }
        return maxLen;
    }
}
全部评论

相关推荐

鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务