java 查找最长连续子序列

背景:

最近工作需要,要给银行查看报关业务持续时间最长的企业,并求出连续年均涨幅,因此需要找出连续的年份,就自己写了个方法:

1,对list排序。

2,将每个连续子序列的起始元素下标和对应的连续长度存到map里。

3,判断是否连续:如果相邻的元素连续,每个元素的值减去对应的下标的差值(interval)肯定是相等的,否则不连续。

public List getMaxSeqSubList(List list) {
        Collections.sort(list);
        Map map = new HashMap<>();
        int interval = -1;
        int lastIndex = -1;
        for (int i = 0; i < list.size(); i++) {
            if (i == 0) {
                interval = list.get(i) - i;
                map.put(i, 1);
                lastIndex = i;
            } else {
                int thisInv = list.get(i) - i;
                if (thisInv != interval) {
                    map.put(i, 1);
                    lastIndex = i;
                } else {
                    map.put(lastIndex, map.get(lastIndex).intValue() + 1);
                }
                interval = thisInv;
            }
        }
        int maxLen = 0;
        List maxList = null;
        for (Entry e : map.entrySet()) {
            if (e.getValue() >= maxLen) {
                maxLen = e.getValue();
                maxList = list.subList(e.getKey(), e.getKey() + e.getValue());
            }
        }
        return maxList;
    }

你可能感兴趣的:(java 查找最长连续子序列)