Longest Consecutive Sequence 【LeetCode】

来源:互联网 发布:淘宝上买尼康d750港货 编辑:程序博客网 时间:2024/06/07 11:12
KeyWords: 
哈希Hash  动规DP
思路:
 1. 将所有数存到一个HashSet中(采用Set的话自动忽略重复数字)
2. 遍历数组中每一个元素,在HashSet中向左向右寻找边界,并删除这些元素(防止后面重复查找),得到当前元素所在的最长sequence长度,更新max值
3. 返回max

整个过程类似一个探索的过程,已被探索出的元素将被删除,不断探索未知元素,并动态更新max


public int longestConsecutive(int[] num) {HashSet<Integer> numSet = new HashSet<Integer>();int longest = 1;for (int each : num) {numSet.add(each);}for (int each : num) {if(numSet.contains(each)){int eachlen = 1;int buf = each;while (numSet.contains(buf - 1)) {eachlen++;numSet.remove(buf - 1);buf--;}buf = each;while (numSet.contains(buf + 1)) {eachlen++;numSet.remove(buf + 1);buf++;}numSet.remove(each);longest = eachlen > longest ? eachlen : longest;}}return longest;}

<span style="font-size:14px;">if(numSet.contains(each)) 和 <span style="text-align: -webkit-auto;">numSet.remove(each) 其实有些冗余,去掉的话不影响功能也不会增加太多的时间冗余</span></span>
<span style="font-size:14px;"><span style="text-align: -webkit-auto;">加上是为了增强代码的可读性,易于理解~</span></span>

0 0