题解 | #基于Go语言的最长无重复子数组的解法#

最长无重复子数组

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

概述

整个算法的核心思想是采用滑动窗口的方式来找到最大无重复子数组的长度,要注意的有两点:滑动窗口的左边界一定要排除掉滑动窗口中出现重复的数值.

算法步骤描述:

 step0. 输入数组arr;
 step1. 初始化空字典set;
 step2. 初始化左边界left=0;
 step3. 初始化最大长度为maxlen=0;
 step4. 初始化右边界right=0;
 step5. 判定right<数组arr的长度是否成立,成立执行step6;否者,跳转到step11;
 step6. 判定字典set中是否存在键值对arr[right]:right,存在,执行step7;否者,执行step8;
 step7. 从字典中删除键值对arr[left]:left;left++,right--;
 step8. 更新set中键值对arr[right]:right;
 step9. 判定maxlen<right-left+1是否成立,成立则计算maxlen=right-left+1;
 step10. right++,跳转到step5;
 step11. 输出结果maxlen。

代码1 统计字典set中元素的个数确定无重复子数组长度。

package main
 
/**
 *
 * @param arr int整型一维数组 the array
 * @return int整型
*/
func maxLength( arr []int ) int {
    // write code here
    set:=make(map[int]int)
    left:=0
    maxlen:=0
    for right:=0;right<len(arr);right++{
        if _,ok:=set[arr[right]];ok==true{
            if left<right{
                delete(set,arr[left]) // remove element not existed in slipping window.
                left++
                right--
            }
        }
        set[arr[right]]=right // update v:k
        if maxlen < len(set){
            maxlen=len(set)
        }
    }
    return maxlen
}

代码2:

计算根据左边界和有边界的个数确定无重复子数组长度:

package main
 
/**
 *
 * @param arr int整型一维数组 the array
 * @return int整型
*/
func maxLength( arr []int ) int {
    // write code here
    set:=make(map[int]int)
    left:=0
    maxlen:=0
    for right:=0;right<len(arr);right++{
        if _,ok:=set[arr[right]];ok==true{
            if left<right{
                delete(set,arr[left]) // remove element not existed in slipping window.
                left++
                right--
            }
        }
        set[arr[right]]=right // update v:k
        if maxlen < right-left+1{
            maxlen=right-left+1
        }
    }
    return maxlen
}
全部评论

相关推荐

如题
投递阿里巴巴集团等公司10个岗位 >
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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