
思路一: 自己想到的思路。很自然想到要sort,但是用什么方法sort可以是O(n)时间复杂度呢?那么第一想到的是bucket sort,但是如果一个数一个bucket的话很有可能memory exceeded。所以这边我用了一个treeset数据结构,将数组中的数字放进treeset然后treeset会自动按自然顺序排序里面的数字(从小到大)。当然也可以用treemap。直接上代码:
class Solution {
public int longestConsecutive(int[] nums) {
if(nums.length == 0) return 0;
TreeSet<Integer> sorted = new TreeSet<>();
for(int num : nums){
sorted.add(num);
}
Iterator iter = sorted.iterator();
int count = 1;
int flag = 0; // 用来标记第一次循环
int res = 1; // 最终要返回的结果
int pre = 0;
while(iter.hasNext()){
if(flag == 0){
pre = (int)iter.next();
flag = 1;
}else{
int curr = (int)iter.next();
if(curr - pre == 1){
count++;
}else{
count = 1;
}
pre = curr;
}
res = Math.max(res,count);
}
return res;
}
}
总结:
- 遍历set和map要用到iterator。
- treeset和treemap是保证顺序的。保证顺序 的时间复杂度为O(logn)。
本文介绍了一种寻找数组中最长连续数字序列的算法。通过使用TreeSet数据结构,该算法能在O(n log n)时间复杂度内完成排序并找出最长连续序列。文章详细解释了如何利用TreeSet自动排序特性来优化算法性能。
920

被折叠的 条评论
为什么被折叠?



