背景:
最近工作需要鱼响,要給銀行查看報關(guān)業(yè)務(wù)持續(xù)時間最長的企業(yè)鸣剪,并求出連續(xù)年均漲幅,因此需要找出連續(xù)的年份丈积,就自己寫了個方法:
1筐骇,對list排序。
2江滨,將每個連續(xù)子序列的起始元素下標(biāo)和對應(yīng)的連續(xù)長度存到map里铛纬。
3,判斷是否連續(xù):如果相鄰的元素連續(xù)唬滑,每個元素的值減去對應(yīng)的下標(biāo)的差值(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;
}