美文网首页
java 查找最长连续子序列

java 查找最长连续子序列

作者: Josen_Qu | 来源:发表于2017-11-16 13:22 被阅读27次

背景:

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

1,对list排序。

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

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

public List<Integer> getMaxSeqSubList(List<Integer> list) {
        Collections.sort(list);
        Map<Integer, Integer> 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<Integer> maxList = null;
        for (Entry<Integer, Integer> e : map.entrySet()) {
            if (e.getValue() >= maxLen) {
                maxLen = e.getValue();
                maxList = list.subList(e.getKey(), e.getKey() + e.getValue());
            }
        }
        return maxList;
    }

相关文章

  • java 查找最长连续子序列

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

  • 算法(04)动态规划

    零钱问题 背包问题 最长公共子序列 最长公共子串 最长上升子序列 最大连续子序列和

  • 最长递增子序列: 动态规划和LCS(最长公共子序列)

    最长递增子序列: 动态规划和LCS(最长公共子序列)子序列和子串的区别:子序列不连续,字串连续。这个题两种解法 动...

  • 最长公共字串和最长公共子序列

    最长公共字串,字符必须连续 最长公共子序列,字符不需要连续

  • 机试常用算法和题型-动态规划专题

    动态规划专题 最大连续子序列求和 方法二:很巧妙 最大加权子矩阵-矩阵压缩 最长不下降子序列 最长不下降子序列应用...

  • LCS问题

    LCS问题包括最长公共子序列和最长公共子串,其中,最长公共子串要求必须连续。 对于二者的求解方式 最长公共子序列:...

  • dp经典问题

    1. 最长子序列问题 最长上升不连续子序列 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入:...

  • 动态规划设计

    1. 最长子序列问题 最长上升不连续子序列 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入:...

  • LintCode-最长上升连续子序列 II

    描述 给定一个整数矩阵(其中,有 n 行, m 列),请找出矩阵中的最长上升连续子序列。(最长上升连续子序列可从任...

  • LeetCode 300. 最长上升子序列(Longest In

    300. 最长上升子序列 Python3 实现 动态规划 维护子序列+二分查找 GitHub链接:https://...

网友评论

      本文标题:java 查找最长连续子序列

      本文链接:https://www.haomeiwen.com/subject/akslvxtx.html