【LeetCode】Longest Consecutive Sequence
来源:互联网 发布:c语言架构 编辑:程序博客网 时间:2024/06/06 02:50
Longest Consecutive Sequence
Total Accepted: 7382 Total Submissions: 27608 My Submissions
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example,
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.
Your algorithm should run in O(n) complexity.
解题思路
1、暴力搜素,对每个数都搜一遍,这个很明显,需要O(N*M),应该会超时,我没试过。
2、将当前数组放到set中,然后扫描数组,对每个数进行加减判断,如果扫描到了,就从set中remove掉,同时count++。这样一遍就可以扫描出结果。
这个思路我用了两种方法,不过第2种明显比第1种要耗时。
Total Accepted: 7382 Total Submissions: 27608 My Submissions
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example,
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.
Your algorithm should run in O(n) complexity.
解题思路
1、暴力搜素,对每个数都搜一遍,这个很明显,需要O(N*M),应该会超时,我没试过。
2、将当前数组放到set中,然后扫描数组,对每个数进行加减判断,如果扫描到了,就从set中remove掉,同时count++。这样一遍就可以扫描出结果。
这个思路我用了两种方法,不过第2种明显比第1种要耗时。
Java AC 1
public class Solution { public HashSet<Integer> numSet; public int longestConsecutive(int[] num) { if(num == null || num.length == 0){ return 0; } int len = num.length; int maxNum = num[0]; numSet = new HashSet<Integer>(); for(int i = 0; i < len; i++){ numSet.add(num[i]); } int maxLen = 1; for(int i = 0; i < len; i++){ int tempLen = 1; if(numSet.contains(num[i])){ tempLen += getCount(num[i] + 1, 1); tempLen += getCount(num[i] - 1, 2); } if(tempLen > maxLen){ maxLen = tempLen; } } return maxLen; } public int getCount(int curNum, int seq){ int count = 0; while(numSet.contains(curNum)){ numSet.remove(curNum); if(seq == 1){ curNum++; }else{ curNum--; } count++; } return count; }}Java AC 2
public class Solution { public int longestConsecutive(int[] num) { if(num == null || num.length == 0){ return 0; } int len = num.length; int maxNum = num[0]; int minNum = num[0]; HashSet<Integer> numSet = new HashSet<Integer>(); for(int i = 0; i < len; i++){ numSet.add(num[i]); if(num[i] > maxNum){ maxNum = num[i]; } if(num[i] < minNum){ minNum = num[i]; } } int maxLen = 1; for(int i = 0; i < len; i++){ if (numSet.isEmpty()) {break;} if(!numSet.contains(num[i])){ continue; } numSet.remove(num[i]); int tempLen = 1; for(int j = 1; j <= maxNum-num[i]; j++){ if(numSet.contains(num[i]+j)){ numSet.remove(num[i]+j); tempLen++; }else{ break; } } for(int j = 1; j <= Math.abs(num[i]-minNum); j++){ if(numSet.contains(num[i]-j)){ numSet.remove(num[i]-j); tempLen++; }else{ break; } } if(tempLen > maxLen){ maxLen = tempLen; } } return maxLen; }}
0 0
- Leetcode : Longest Consecutive Sequence
- [Leetcode] Longest Consecutive Sequence
- [leetcode] longest consecutive sequence
- 【leetcode】Longest Consecutive Sequence
- LeetCode - Longest Consecutive Sequence
- [LeetCode]Longest Consecutive Sequence
- leetcode:Longest Consecutive Sequence
- [Leetcode]Longest Consecutive Sequence
- [leetcode]Longest Consecutive Sequence
- leetcode Longest Consecutive Sequence
- Leetcode: Longest Consecutive Sequence
- LeetCode:Longest Consecutive Sequence
- [leetcode] Longest Consecutive Sequence
- LeetCode-Longest Consecutive Sequence
- LeetCode - Longest Consecutive Sequence
- [LeetCode] longest consecutive sequence
- LeetCode | Longest Consecutive Sequence
- [leetcode]Longest Consecutive Sequence
- 基础集合类
- 关于工作
- 基本linux命令
- 初学ios app开发的一些学习技巧教程
- 勇闯FreeBSD(一)
- 【LeetCode】Longest Consecutive Sequence
- TableLayoutPanel的RowSpan和ColumnSpan的使用
- mybatis 关联
- Android官方提供的支持不同屏幕大小的全部方法
- Computer Vision Tutorials from Conferences (2) -- ECCV
- MVC中部分视图调用方法
- RTP 协议
- mybatis 缓存与懒加载
- tomcat启动错误:严重: Error initializing endpoint java.lang.Exception: Socket bind failed: [730048] ???????