Skip to content

Commit

Permalink
Merge pull request #4 from stada526/f/128
Browse files Browse the repository at this point in the history
128. Longest Consecutive Sequence
  • Loading branch information
stada526 authored Jul 10, 2024
2 parents 1055c56 + a46e68f commit e2fa6cf
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/solutions.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
mod s_110_balanced_binary_tree;
mod s_128_longest_consecutive_sequence;
mod s_143_reorder_list;
mod s_153_find_minimum_in_rotated_sorted_array;
mod s_155_min_stack;
Expand Down
44 changes: 44 additions & 0 deletions src/solutions/s_128_longest_consecutive_sequence.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
use std::collections::HashSet;

struct Solution {}

impl Solution {
pub fn longest_consecutive(nums: Vec<i32>) -> i32 {
let mut num_set = HashSet::<i32>::new();
for num in nums.iter() {
num_set.insert(*num);
}

let mut res = 0;

for i in 0..nums.len() {
if Self::is_first_in_sequence(&num_set, nums[i]) {
let mut cnt = 0;
let mut num = nums[i];
while num_set.contains(&num) {
cnt += 1;
num += 1
}
res = res.max(cnt);
}
}

return res;
}

fn is_first_in_sequence(num_set: &HashSet<i32>, num: i32) -> bool {
return !num_set.contains(&(num - 1));
}
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test() {
let nums = vec![100, 4, 200, 1, 3, 2];
let res = Solution::longest_consecutive(nums);
assert_eq!(res, 4)
}
}

0 comments on commit e2fa6cf

Please sign in to comment.