Leetcode 128. Longest Consecutive Sequence:
来源:互联网 发布:学美工设计要什么基础 编辑:程序博客网 时间:2024/06/08 01:22
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.
- HashSet:
my java solution
class Solution { public int longestConsecutive(int[] nums) { Set <Integer> set = new <Integer>HashSet(); int result = 0; for (int i = 0; i < nums.length; i++){ set.add(nums[i]); } for(int i = 0; i < nums.length; i++){ int len = 0; if (set.contains(nums[i])){ int num = nums[i]; set.remove(num); len++; while(set.contains(num+1)){ set.remove(num+1); num++; len++; } num = nums[i]; while(set.contains(num-1)){ set.remove(num-1); num--; len++; } result = Math.max(len,result); } } return result; }}
2.HashMap
We will use HashMap. The key thing is to keep track of the sequence length and store that in the boundary points of the sequence. For example, as a result, for sequence {1, 2, 3, 4, 5}, map.get(1) and map.get(5) should both return 5.
Whenever a new element n is inserted into the map, do two things:
1.See if n - 1 and n + 1 exist in the map, and if so, it means there is an existing sequence next to n. Variables left and right will be the length of those two sequences, while 0 means there is no sequence and n will be the boundary point later. Store (left + right + 1) as the associated value to key n into the map.
2.Use left and right to locate the other end of the sequences to the left and right of n respectively, and replace the value with the new length
public int longestConsecutive(int[] num) { int res = 0; HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); for (int n : num) { if (!map.containsKey(n)) { int left = (map.containsKey(n - 1)) ? map.get(n - 1) : 0; int right = (map.containsKey(n + 1)) ? map.get(n + 1) : 0; // sum: length of the sequence n is in int sum = left + right + 1; map.put(n, sum); // keep track of the max length res = Math.max(res, sum); // extend the length to the boundary(s) // of the sequence // will do nothing if n has no neighbors map.put(n - left, sum); map.put(n + right, sum); } else { // duplicates continue; } } return res;}
- [LeetCode]128.Longest Consecutive Sequence
- [Leetcode] 128. Longest Consecutive Sequence
- [leetcode] 128.Longest Consecutive Sequence
- [leetcode] 128.Longest Consecutive Sequence
- Leetcode 128. Longest Consecutive Sequence
- Leetcode 128. Longest Consecutive Sequence
- LeetCode 128. Longest Consecutive Sequence
- LeetCode 128. Longest Consecutive Sequence
- [LeetCode]128. Longest Consecutive Sequence
- 【leetcode】128. Longest Consecutive Sequence
- Leetcode 128. Longest Consecutive Sequence
- leetcode.128. Longest Consecutive Sequence
- [leetcode] 128. Longest Consecutive Sequence
- LeetCode-128.Longest Consecutive Sequence
- Leetcode 128. Longest Consecutive Sequence
- [LeetCode] 128. Longest Consecutive Sequence
- LeetCode 128. Longest Consecutive Sequence
- [LeetCode]128. Longest Consecutive Sequence
- uva 11584
- mysql 使用select插入多条数据,insert into (1,2,3,4,)select(1,2,3,4)
- Redis 有序集合
- Python编程中遇到NameError: name 'reload' is not defined 问题以及Python编码问题
- 设计模式——工厂模式
- Leetcode 128. Longest Consecutive Sequence:
- 三分钟了解Activity工作流
- 【python 图像识别】图像识别从菜鸟走向大神系列1
- springmvc拦截器验证
- 让枚举可以输出字符串
- nutz框架的添加和删除
- absolute同时设置left,right,top,bottom
- Redis持久化介绍
- 解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX