def longest_consecutive(nums):
s=set(nums); best=0
for n in s:
if n-1 not in s:
cur,streak=n,1
while cur+1 in s: cur+=1; streak+=1
best=max(best,streak)
return best
public int longestConsecutive(int[] nums){
Set<Integer> s=new HashSet<>();
for(int n:nums) s.add(n);
int best=0;
for(int n:s){
if(!s.contains(n-1)){
int cur=n,streak=1;
while(s.contains(cur+1)){cur++;streak++;}
best=Math.max(best,streak);
}
} return best;
}
'not in' vs !contains(). O(n) with hash set.
def longest_consecutive(nums):
s=set(nums); best=0
for n in s:
if n-1 not in s:
cur,streak=n,1
while cur+1 in s: cur+=1; streak+=1
best=max(best,streak)
return best
public int longestConsecutive(int[] nums){
Set<Integer> s=new HashSet<>();
for(int n:nums) s.add(n);
int best=0;
for(int n:s){
if(!s.contains(n-1)){
int cur=n,streak=1;
while(s.contains(cur+1)){cur++;streak++;}
best=Math.max(best,streak);
}
} return best;
}
1. Set for O(1) lookup 2. Start streak at beginning