128. 最长连续序列
package leetcode; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class demo_128 { public int longestConsecutive(int[] nums) { //先排序 Arrays.sort(nums); List<Integer> list=new ArrayList<Integer>(); //排除空的数组 if(nums.length==0) {return 0;} int len=1; int maxlen=1; list.add(nums[0]); int i=1; while(i<nums.length) { //跳过所有相同的数组 while(i<nums.length&&nums[i]==nums[i-1]) { i=i+1; } if(i<nums.length) { //将数组所有不同的数放在List中 list.add(nums[i]); //计算长度 if(list.get(list.size()-1)-list.get(list.size()-2)==1) { len=len+1; } else { //如果当前长度大于最长长度则替换 if(len>maxlen) { maxlen=len; } len=1; } } i=i+1; } //如果最后一个数也符合,但maxlen不会被更新,所以补上 if(len>maxlen) {maxlen=len;} System.out.println(maxlen); return maxlen; } public static void main(String[] args) { // TODO Auto-generated method stub demo_128 d128= new demo_128(); int[] nums= {9,1,-3,2,4,8,3,-1,6,-2,-4,7}; d128.longestConsecutive(nums); } }
O(n)的解决方法
public int longestConsecutive(int[] nums) { if(nums.length==0) {return 0;} int maxlen=1; int currentnum; int len; HashSet<Integer> hs=new HashSet<Integer>(); //用set集合删除重复的元素 for(int num:nums) { hs.add(num); } for(int num:hs) { //找出所有可能结果的起始元素 if(!hs.contains(num-1)) { currentnum=num; len=1; //不断找出当前元素的下一个元素 while(hs.contains(currentnum+1)) { currentnum=currentnum+1; len=len+1; } if(len>maxlen) { maxlen=len; } } } System.out.println(maxlen); return maxlen; }
浙公网安备 33010602011771号