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

最长无重复子数组

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

import java.util.*;


public class Solution {
    /**
     *
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public int maxLength (int[] arr) {
        int maxLen = 0;
        HashMap<Integer, Integer> hash = new HashMap<>();
        int i = 0, j = 0;
        for(; j < arr.length; ++j)
        {
            if(hash.containsKey(arr[j]))
            {
                int k = hash.get(arr[j]);  // 接下来会把arr[k]删掉
                maxLen = (j - i) > maxLen ? (j - i) : maxLen;
                while(i <= k)
                {
                    hash.remove(arr[i]);
                    i++;
                }// 出循环后i=k+1
            }
            hash.put(arr[j], j);   // arr[j]仅仅表示试探的元素,一定要加进去
        }                          // 因为之前把arr[k]删了
        maxLen = (j - i) > maxLen ? (j - i) : maxLen;
        return maxLen;
    }
}
// 方法二利用队列
public class Solution {
    /**
     *
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public int maxLength (int[] arr) {
        int maxLen = 0;
        Queue<Integer> q = new LinkedList<>();
        for(int i = 0; i < arr.length; ++i)
        {
            while(q.contains(arr[i])) q.poll();  //把队头到arr[i]这部分删除
            q.add(arr[i]);                       // 重新加上arr[i]
            maxLen = Math.max(maxLen, q.size()); 
        }
        return maxLen;
    }
}

全部评论

相关推荐

牛客96763241...:杭电✌️也是打完招呼,没人回吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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