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

最长无重复子数组

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

package com.hhdd.双指针;

import java.util.HashMap;

/**
 * @Author huanghedidi
 * @Date 2022/8/7 23:23
 */
public class 最长无重复子数组 {

    public static void main(String[] args) {
        int[] arr = {1,2,3,4,2,5,1};
        int re = maxLength(arr);
        System.out.println("re = " + re);
    }

    /**
     * 使用滑动窗口解决
     *
     * @param arr
     * @return
     */
    public static int maxLength(int[] arr) {
        // write code here
        if (arr.length == 1) {
            return 1;
        }
        int res = 0;
        int left = 0;
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < arr.length; i++) {
            // 如果包含就得刷新left
            Integer tmp = map.get(arr[i]);
            if (tmp!=null && tmp >= left) {
                // 包含了也不一定就得调整left 因为1 2 3 4 2 1 在第二个2 的位置已经把1给调整清理掉了
                left = tmp + 1;
            } else {
                res = Math.max(res, i - left + 1);
            }
            map.put(arr[i], i);
        }
        return res;
    }
}

全部评论

相关推荐

02-25 11:00
点赞 评论 收藏
分享
牛至超人:您好,京东物流岗了解一下吗?负责精加工食品的端到端传输
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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