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

最长无重复子数组

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

package main

/**
 * 
 * @param arr int整型一维数组 the array
 * @return int整型
*/
func maxLength( arr []int ) int {
    // write code here
    max := 1
    for i:=0; i< len(arr)-1; i++ {
        exist := make(map[int]int)
        count := 0
        if arr[i] == arr[i+1] {
            continue
        }

        exist[arr[i]] = i
        count += 1
        for j:=i+1; j<len(arr); j++{
            if index, ok := exist[arr[j]]; ok {
                i = index
                break
            }
            exist[arr[j]] = j
            count += 1  
        }
        if count > max {
            max = count
        }

    }
    return max

}

在第一版当中 我们的exist 为map[int]bool, 代码如下:

package main

/**
 * 
 * @param arr int整型一维数组 the array
 * @return int整型
*/
func maxLength( arr []int ) int {
    // write code here
    max := 1
    for i:=0; i< len(arr)-1; i++ {
        exist := make(map[int]bool)
        count := 0
        if arr[i] == arr[i+1] {
            continue
        }

        exist[arr[i]] = i
        count += 1
        for j:=i+1; j<len(arr); j++{
            if _, ok := exist[arr[j]]; ok {

                break
            }
            exist[arr[j]] = true
            count += 1  
        }
        if count > max {
            max = count
        }

    }
    return max

}

这个代码是无记忆的,对于 1232456,第一遍123 遇到2终止;第二遍从2开始,遇到2终止;这里面其实是没必要的,遇到2之后,后续最大的只可能从前一个2的index开始,所以我们直接将i跳转到index,后续的i++,使其指向index+1,从这个地方开始遍历,可以极大的减少搜索次数。

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
10-12 10:48
已编辑
秋招之苟:邻居家老哥19届双2硕大厂开发offer拿遍了,前几天向他请教秋招,他给我看他当年的简历,0实习实验室项目技术栈跟开发基本不沾边😂,我跟他说这个放在现在中厂简历都过不了
点赞 评论 收藏
分享
11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务