[Leetcode]Longest Consecutive Sequence
2015-07-17 22:47
549 查看
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example,
Given
The longest consecutive elements sequence is
Your algorithm should run in O(n) complexity.
思路:
先用set存储数组中的不同元素。然后对Set内的元素进行顺序查找,过程如下:
1.读取集合中的头元素a,将其从集合中删除;
2.在集合中查找a+1的值是否存在(set.contains()方法),如果有则删除该元素,继续查找a+2...a+m,a+m+1不存在,则跳出循环;
3.在集合中查找a-1的值是否存在,如果有则元素,继续查找a-2...a-p,a-p-1不存在,则跳出循环;
4.记录m+p+1的值则是此次查找出的最长连续序列数,将其与max比较,选择最大的;
5.再次选择头元素,重复上述过程,直到集合元素遍历完。
代码:(Java)
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.
思路:
先用set存储数组中的不同元素。然后对Set内的元素进行顺序查找,过程如下:
1.读取集合中的头元素a,将其从集合中删除;
2.在集合中查找a+1的值是否存在(set.contains()方法),如果有则删除该元素,继续查找a+2...a+m,a+m+1不存在,则跳出循环;
3.在集合中查找a-1的值是否存在,如果有则元素,继续查找a-2...a-p,a-p-1不存在,则跳出循环;
4.记录m+p+1的值则是此次查找出的最长连续序列数,将其与max比较,选择最大的;
5.再次选择头元素,重复上述过程,直到集合元素遍历完。
代码:(Java)
public class Solution { public int longestConsecutive(int[] nums) { if(nums.length==1){ return 1; } Set<Integer> arrset = new HashSet<Integer>(); for(int i=0;i<nums.length;i++){ arrset.add(nums[i]); } Iterator<Integer> iter = arrset.iterator(); int max = 0; while(iter.hasNext()){ int count1=0; int count2=0; int a = iter.next()+1; int b = a-2; iter.remove(); Iterator<Integer> it1 = arrset.iterator(); if(it1.hasNext()){ while(it1.hasNext() && arrset.contains(a++)){ count1++; arrset.remove(a-1); } } Iterator<Integer> it2 = arrset.iterator(); if(it2.hasNext()){ while(it2.hasNext()&& arrset.contains(b--)){ count2++; arrset.remove(b+1); } } max = Math.max(max,count1+count2+1); iter = arrset.iterator(); } return max; } }
相关文章推荐
- iOS开发——UI基础-提示框
- POJ2299 Ultra-QuickSort
- UIView的无损截图
- QueryPerformanceFrequency用法--Windows高精度定时计数
- polymer-developer guide-feature overview
- UIPopoverController 的使用
- 黑马程序员——基础学习(十四)多线程(Thread)和图形界面编程(GUI)
- polymer-developer guide-registration and lifecycle
- 准备开源一套异形UI控件
- 黑马程序员----拜拜DOS,helloGUI
- 准备开源一套异形UI控件
- Android问题集锦之二十九:Cannot run program "/xx/build-tools/xx/aapt": error=2, No such file or directory
- Android UI学习之TextView
- IOS之UINavigationBar设计和定制
- UVA - 11995 I Can Guess the Data Structure!
- Unique Paths
- UIView动画(过渡效果)的学习笔记
- Queue
- PROGRAMMER PRODUCTIVITY STARTS WITH REQUIREMENTS, NOT TOOLS!
- IOS--UI--LessonUITabBarController 标签控制器