iOS高阶算法3:最长连续序列(Swift语言实现)

2019-07-10  本文已影响0人  小呀小苹果呀
image.png
class Solution {
    //思路:用一个数据字典存储数组nums元素,然后遍历数组nums,如果字典中存在这个数字n,就向左右(减一和加一)两个方向寻找相邻值是否在字典中,如果在则当前长度自增1,为防止重复查找,同步从字典中删除这个元素
    //测试用例:[0],[100, 4, 200, 1, 3, 2],[5, 100, 4, 200, 6, 1, 3, 2],[-4,-4,2,-6,9,6,8,-6,-9,-1,9,5,2,-6,0]
    func longestConsecutive(_ nums: [Int]) -> Int {
        
        var longest = 0
        
        var numsDic = [Int : Int]()
        for i in 0..<nums.count {
            numsDic[nums[i]] = i
        }
        

        var left = 0
        var right = 0
        var len = 0

        for n in nums {
            guard numsDic[n] != nil else {
                continue
            }

            left = n - 1
            right = n + 1
            len = 0
            
            numsDic.removeValue(forKey: n)

            while numsDic[left] != nil {
                len += 1
                numsDic.removeValue(forKey: left)
                left -= 1
            }
            
            while numsDic[right] != nil {
                len += 1
                numsDic.removeValue(forKey: right)
                right += 1
            }
            
            longest = max(longest, len + 1)
            
        }
        
        return longest
    }
}

上一篇下一篇

猜你喜欢

热点阅读