zoukankan      html  css  js  c++  java
  • 【leetcode】128. Longest Consecutive Sequence

    题目如下:

    解题思路:我的解法是先用字典dic记录所有在nums中出现的元素,一是为了后面方便查找,二是为了去重。接下来开始依次遍历nums中每个元素i,需要从前(即i+1)后(即i-1)两个方向查找,如果dic中存在i+1或者i-1,表示连续,接下来继续查找i+2,i-2,直到找到不存在的元素为止,记为i+k,i-j,那么这一段连续的长度就是k+j+1。注意:在查找的过程中,如果i+k,i-j在dic中存在,那么需要删除掉,这是为了避免重复查找,因为i+k,i-j已经包括在我们计算出来的这段序列中了。

    代码如下:

    class Solution(object):
        def longestConsecutive(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
    
          dic = {}
            for i in nums:
                if i not in dic:
                    dic[i] = 1
            res = 0
            for i in nums:
                if i not in dic:
                    continue
                count = 1
                high = i
                #分别往两个方向查找
                while True:
                    if high + 1 in dic:
                        count += 1
                        #注意,存在的high+1的话,可以从dic中把这个元素删除,避免后面重复操作
                        dic.pop(high+1)
                    else:
                        break
                    high += 1
                low = i
                while True:
                    if low - 1 in dic:
                        count += 1
                        dic.pop(low - 1)
                    else:
                        break
                    low -= 1
                #print i,count,res
                res = max(res,count)
            return res
  • 相关阅读:
    Toggle控制窗口的显隐
    碰撞检测(2D&&3D)
    3D空间 圆柱体画线
    鼠标拖动2D物体(图片)
    实现图片的闪烁效果
    UI 2D图片随鼠标旋转
    射线检测(Summary)
    [转]C#静态方法与非静态方法的比较
    获取精灵
    用于切割字符串的方法
  • 原文地址:https://www.cnblogs.com/seyjs/p/9018425.html
Copyright © 2011-2022 走看看