小米OJ第4题:最长连续数列

题目

描述
输入一个乱序的连续数列,输出其中最长连续数列长度,要求算法复杂度为 O(n) 。

输入
54,55,300,12,56

输出
3

输入样例

100,4,200,1,3,2
54,55,300,12
1
5,4,3,2,1
1,2,3,4,5,6

输出样例

4
2
1
5
6

思路

先排序,然后下一个元素和上一个元素比较。如果连续则连续长度加1,否则记录当前连续长度,然后将下一次连续长度计为1继续查找。每次保存连续长度都与上次保存的连续长度作比较,保存较大的连续长度。最后得到最大的连续长度,即最长连续数列。

实现

import java.util.*;

public class Main {
    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);
        String line;
        while (scan.hasNextLine()) {
            line = scan.nextLine().trim();
            String strNumbers[] = line.split(",");
            //转换
            int numbers[] = new int[strNumbers.length];
            for (int i = 0; i < strNumbers.length; i++) {
                numbers[i] = Integer.parseInt(strNumbers[i]);
            }
            //排序
            Arrays.sort(numbers);
            //查找
            int maxSize = 1;
            int curSize = 1;
            int i = 0;
            int lastNum = numbers[i];
            for (i = 1; i < numbers.length; i++) {
                if(numbers[i] - lastNum == 1) {
                    curSize++;
                }else {
                    if(curSize > maxSize) {
                        maxSize = curSize;
                    }
                    curSize = 1;
                }
                lastNum = numbers[i];
            }
            if(curSize > maxSize) {
                maxSize = curSize;
            }
            System.out.println(maxSize);
        }
    }
}

你可能感兴趣的:(小米OJ第4题:最长连续数列)