golang力扣leetcode 128. 最长连续序列

简介: golang力扣leetcode 128. 最长连续序列

题解

题目要求在一个数组中找出一个数字最长连续序列,还要是On的复杂度

首先把所有数字存在map里面,然后遍历map,此时要对current进行判断,如果hashmap[current-1]存在,那就跳过这次循环,因为我们要去找最小的一个数,如果不存在,这么那个数字必定是某个连续序列中首位数字,这个时候去计数hashmap[current+1]有几个,即可。外层循环需要 O(n)的时间复杂度,只有当一个数是连续序列的第一个数的情况下才会进入内层循环,然后在内层循环中匹配连续序列中的数,因此数组中的每个数只会进入内层循环一次。根据上述分析可知,总时间复杂度为 O(n),符合题目要求。

代码

func longestConsecutive(nums []int) int {
  hashmap := make(map[int]bool)
  for _, i := range nums {
    hashmap[i] = true
  }
  result := 0
  for current := range hashmap {
    if !hashmap[current-1] { //不存在比current小的数
      current := current
      cnt := 1
      for hashmap[current+1] {
        current++
        cnt++
      }
      if result < cnt {
        result = cnt
      }
    }
  }
  return result
}


目录
相关文章
|
2月前
|
存储 算法
《LeetCode》—— 摆动序列
《LeetCode》—— 摆动序列
|
1天前
|
存储 算法
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
4 0
|
1天前
|
Java
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
7 1
|
1天前
leetcode代码记录(最长连续递增序列
leetcode代码记录(最长连续递增序列
6 2
|
1天前
leetcode代码记录(最长递增子序列
leetcode代码记录(最长递增子序列
6 1
|
2天前
|
算法
leetcode代码记录(摆动序列
leetcode代码记录(摆动序列
7 0
|
2月前
|
存储
力扣187 重复DNA序列
力扣187 重复DNA序列
|
4月前
|
Java Go C++
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
35 0
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
|
4月前
|
Java Go C++
Golang每日一练(leetDay0101) 最长递增子序列I\II\个数
Golang每日一练(leetDay0101) 最长递增子序列I\II\个数
23 0
Golang每日一练(leetDay0101) 最长递增子序列I\II\个数
|
4月前
|
Go 容器 SQL
【Golang Leetcode】总目录(Day1~100)
【Golang Leetcode】总目录(Day1~100)
476 1
【Golang Leetcode】总目录(Day1~100)