base version说几句:
数组题一定要考虑重复重复重复的问题!另外循环结束要记得最后一次更新maxLen
O(N)解法思路请移步 http://blog.csdn.net/linhuanmars/article/details/22964467
public class Solution { // Method 1: base version, first sort, then scan to find public int longestConsecutive1(int[] nums) { if (nums == null || nums.length == 0) return 0; Arrays.sort(nums); int len = 1, maxLen = 1; for (int i = 1; i < nums.length; i++) { if (nums[i] == nums[i - 1]) continue; if (nums[i] == nums[i - 1] + 1) { len++; } else { maxLen = Math.max(maxLen, len); len = 1; } } maxLen = Math.max(maxLen, len); return maxLen; } // Method 2: O(n), use hashset public int longestConsecutive(int[] nums) { if (nums == null || nums.length == 0) return 0; HashSet<Integer> set = new HashSet<Integer>(); for (int i = 0; i < nums.length; i++) { set.add(nums[i]); } int maxLen = 0; while (!set.isEmpty()) { Iterator<Integer> iter = set.iterator(); int item = iter.next(); set.remove(item); int len = 1; int i = item - 1; while (set.contains(i)) { set.remove(i--); len++; } i = item + 1; while (set.contains(i)) { set.remove(i++); len++; } if (len > maxLen) maxLen = len; } return maxLen; } }