菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
1888
0

leetcode 219. Contains Duplicate II

原创
05/13 14:22
阅读数 2553

brute force

# brute force pesudo code

find all equal pairs , compare gap with k 组合问题

for i in nums
    for j=i+1 in nums
        if nums[i]==nums[j]
            gap=j-i
            if gap<=k
                return true

return false
//brute force
func containsNearbyDuplicate(nums []int, k int) bool {
    lens:=len(nums)
    for i:=0;i<=lens-1;i++{
        for j:=i+1;j<=lens-1;j++{
            if nums[i]==nums[j] {
                gap:=j-i

                if gap<=k {
                    return true
                }
            }
        }
    }
    return false
}

图片

我的 sliding window

复盘: 滑动窗口还是分析的太慢太乱 , 错误也很多


# sliding window   有错误的伪代码

make a map[int]int
l=0 r=0  map[0]=nums[0]
while r!=endIndex
    if r+1-l<=k && nums[r+1] in map
        return true
    else
        if r+1-l<k
            move r one step forward and save into map
        if r+1-l==k
            move l one step and delete from map
            move r one step and save to map

return false

leetcode 219. Contains Duplicate II

func containsNearbyDuplicate(nums []int, k int) bool {
    if len(nums)==0 {
        return false
    }
if k==0 {
        return false
    }
    map1:=make(map[int]int)
    l:=0
    r:=0
    map1[nums[0]]=0

    for r<len(nums)-1 {
        inMap:=false
        if _,ok:=map1[nums[r+1]];ok {
            inMap=true
        }

        if r+1-l<=k && inMap {
            return true
        } else {
            if r-l<k-1 {
                r++
                map1[nums[r]]=r
                continue
            }
            if r-l==k-1 {
                delete(map1,nums[l])
                l++

                r++
                map1[nums[r]]=r
                continue
            }
        }
    }

    return false

}

leetcode 219. Contains Duplicate II

bobo's sliding window

参考 bobo 老师的解法写的 , 十分简洁 , 不过不太好懂

func containsNearbyDuplicate(nums []int, k int) bool {
    myMap:=make(map[int]int)
    for i:=0;i<len(nums);i++ {
        if _,ok:=myMap[nums[i]];ok {
            return true
        }
        myMap[nums[i]]=i

        if len(myMap) ==k+1 {
            delete(myMap,nums[i-k])
        }
    }

    return false

}

leetcode 219. Contains Duplicate II

发表评论

0/200
1888 点赞
0 评论
收藏
为你推荐 换一批