java 查找最長連續(xù)子序列

背景:

最近工作需要,要給銀行查看報關業(yè)務持續(xù)時間最長的企業(yè),并求出連續(xù)年均漲幅,因此需要找出連續(xù)的年份,就自己寫了個方法:

1,對list排序。

2,將每個連續(xù)子序列的起始元素下標和對應的連續(xù)長度存到map里。

3,判斷是否連續(xù):如果相鄰的元素連續(xù),每個元素的值減去對應的下標的差值(interval)肯定是相等的,否則不連續(xù)。

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;
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 描述 給定一個整數(shù)序列,找到最長上升子序列(LIS),返回LIS的長度。 說明 最長上升子序列的定義:最長上升子序...
    6默默Welsh閱讀 745評論 1 0
  • SwiftDate概況 從Swift發(fā)布起,我們就沒有放棄使用Swift。 當然,我們希望在項目能夠輕松自如地管理...
    Mee_Leo閱讀 10,333評論 1 13
  • (一) 你不來 我不敢走 一不小心 就等到了白頭 (二) 我向上帝祈求 讓我活到最后 因為我比你堅強 可以承受孤獨...
    夢依寒煙醉閱讀 416評論 0 2
  • 其實很想念曾經,關于那些人、那些事,不是說忘掉就能忘掉。想念我們曾經肆無忌憚的笑。想念我們曾經的喜怒哀樂。想念我們...
    有一句我替你說閱讀 264評論 0 1
  • 今天想和大家分享的,是XXM小姐的故事。別誤會,不是她和我的愛情故事。我是女生,雖然性格純爺們兒,但我不至于口味那...
    REmindmey閱讀 954評論 1 3

友情鏈接更多精彩內容