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

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

作者: 小呀小苹果呀 | 来源:发表于2019-07-10 15:55 被阅读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
        }
    }
    
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/bqvhkctx.html