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

最长无重复子数组

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

import java.util.*;


public class Solution {
    /**
     * 
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public int maxLength (int[] arr) {
        // write code here
        //首先跟个数有关,需要利用HashMap,里面记录的是元素,和当前元素对应的索引值
        //记录子数组的起点start和终点i
        // 利用res记录下最长的情况
        HashMap<Integer,Integer> hm = new HashMap<>();
        int res = 0;
        int start = 0;
        for(int i = 0; i< arr.length;i++){
           if(hm.containsKey(arr[i])){
                //如果元素已经在hashMap里面,存在两种可能
                // 1.重复的元素已经在无重复子数组左边,不影响,不用换起点
                // 2.重复添加的元素在无重复子数组的里面,需要缩小当前的子数组,换起点
                start = Math.max(start,hm.get(arr[i]) + 1);
           }
           //元素不在里面,加入到hashMap,并且加入它对应的索引值
           hm.put(arr[i],i);
            // 每次比较之前记录的最大值和当前子数组的长度
           res = Math.max(res,i-start+1);

        }
        return res;
    }
}

首先,因为无重复,判断是否重复用HashMap。然后是最长的子数组,用res记录最长的情况。每次要比较更新它。

如果重复的部分,是小于start的,也就是hm.get(arr[i]) 是小于start,那边start还是原来的

如果重复部分在数组里面,需要更换起点,也就是hm.get(arr[i])是大于start的,更换起点为 hm.get(arr[i)+1

这两种情况,可以直接用max函数合并

然后不重复的部分,就执行put完事儿,并且更新res,比较res和i-start的情况

感觉这一题还是很巧妙

全部评论

相关推荐

时间线:&nbsp;1.4-1.5:&nbsp;boss&nbsp;牛客&nbsp;官网&nbsp;实习僧海投了两天,&nbsp;感觉确实没啥招人的啊,&nbsp;心里凉了一半.1.6:&nbsp;中午快手约面,&nbsp;下午字节hr飞书私聊约面,&nbsp;当时想着第一次面大厂感觉三个过一个一面就已经赢了.1.7:&nbsp;下午&nbsp;3点大厂处女面,&nbsp;哈哈面试官是重邮红岩的直接保送;&nbsp;5点快手一面,&nbsp;我说这个是我的第二次大厂面试,&nbsp;面试官问要是拿到字节和快手选择哪个,&nbsp;我说昨天看了一晚上快手百分百选快手哈哈哈.&nbsp;晚上5.30字节约二面,&nbsp;快手约二面,&nbsp;小红书约一面.1.8:&nbsp;下午2点快手二面,&nbsp;聊天面体验非常好(当天电话确认入职时间);&nbsp;4点字节二面这次不是校友了,&nbsp;然后有一个CSS实现switch效果的忘记属性咋写了,&nbsp;感觉危了;&nbsp;7.30&nbsp;问字节hr是不是挂了;&nbsp;9点开始小红书一面,&nbsp;难死我了,&nbsp;但我还是笑着面完了,&nbsp;然后卸载了小红书,&nbsp;但是过了一会会小红书hr约二面,&nbsp;遂下回来了字节约三面.1.9:&nbsp;下午2点字节三面,&nbsp;依旧聊天+算法,&nbsp;自己太菜了有一个写错了,&nbsp;面完感觉又危了;&nbsp;5点面小红书20min结束(offer审批);5.30又去问字节hr是不是挂了,&nbsp;hr小姐姐说干嘛用一个句式,&nbsp;我说手写题又又又没写出来😂,&nbsp;2min后约hr面;8.30&nbsp;快手offer总结,&nbsp;自己运气好遇到了好公司好部门好面试官,&nbsp;字节剪映&nbsp;快手电商&nbsp;小红书支付的面试体验都非常好,&nbsp;不会的题会带你一步一步思考,&nbsp;流程也非常快全部都是当天推进,&nbsp;小红书是以分钟为单位推进.&nbsp;&nbsp;面经以及细节等我慢慢整理,&nbsp;&nbsp;以及保佑所有的审批不要出问题,&nbsp;我是真怕最后全过了0offer😂bg:&nbsp;重邮&nbsp;大数据&nbsp;蓝山工作室&nbsp;一段非大厂实习
独角仙梦境:这是真👻了
找实习记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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