feat: longest consecutive sequence

This commit is contained in:
2026-01-07 18:54:16 -05:00
parent 2fc909f9c7
commit 20629eab22
2 changed files with 118 additions and 0 deletions

View File

@@ -0,0 +1,86 @@
package longest_consecutive_sequence
// type Node struct {
// // The location of the parent node.
// Parent *Node
// // The number of descendent nodes, including itself.
// Children int
// }
// func FindAncestor(n *Node) *Node {
// ancestor := n
// for ancestor.Parent != nil {
// ancestor = ancestor.Parent
// }
// return ancestor
// }
// func LongestConsecutive(nums []int) int {
// nodes := map[int]*Node{}
// for _, num := range nums {
// if _, exists := nodes[num]; exists {
// continue
// }
// node := &Node{Parent: nil, Children: 1}
// if lower, lower_exists := nodes[num-1]; lower_exists {
// ancestor := FindAncestor(lower)
// ancestor.Parent = node
// node.Children += ancestor.Children
// }
// if upper, lower_exists := nodes[num+1]; lower_exists {
// ancestor := FindAncestor(upper)
// ancestor.Parent = node
// node.Children += ancestor.Children
// }
// nodes[num] = node
// }
// maximum := 0
// for _, node := range nodes {
// maximum = max(maximum, node.Children)
// }
// return maximum
// }
func LongestConsecutive(nums []int) int {
items := map[int]bool{}
for _, num := range nums {
items[num] = true
}
maximum := 0
for item, unused := range items {
if !unused {
continue
}
items[item] = false
sequence := 1
for i := item - 1; items[i]; i-- {
items[i] = false
sequence++
}
for i := item + 1; items[i]; i++ {
items[i] = false
sequence++
}
maximum = max(maximum, sequence)
}
return maximum
}