最长顺子

public static Integer[] doTest(Integer[] array) {

int[] count = new int[array.length];

for (int i = 0; i < array.length; i++) {

if (array[i] < 1 || array[i] >= array.length)

return null;

++count[array[i]];

}

TreeMap<Integer, Map<Integer, Integer>> allList = new TreeMap<Integer, Map<Integer, Integer>>();

Map<Integer, Integer> map = null;

for (int k = 0; k < 3; k++) {

map = getList(count, k);

if (null != map) {

if (0 == k)

allList.put(map.size(), map);

else if (1 == k)

allList.put(2 * map.size(), map);

else

allList.put(3 * map.size(), map);

}

}

if (allList.size() > 0) {

Map<Integer, Integer> maxList = allList.get(allList.lastKey());

List<Integer> resultList = new LinkedList<Integer>();

Collection<Integer> coll = maxList.values();

int min = Collections.min(coll);

for (Integer k : maxList.keySet()) {

for (int j = 0; j < min; j++) {

resultList.add(k);

}

}

Integer[] result = new Integer[resultList.size()];

resultList.toArray(result);

return result;

} else

return null;

}

private static Map<Integer, Integer> getList(int[] count, int k) {

TreeMap<Integer, Map<Integer, Integer>> list = new TreeMap<Integer, Map<Integer, Integer>>();

Map<Integer, Integer> map = null;

int flag = 0;

for (int i = 1; i < count.length; i++) {

if (count[i] > k && flag == 0) {

flag = 1;

map = new LinkedHashMap<Integer, Integer>();

map.put(i, count[i]);

} else if (count[i] > k && flag == 1) {

map.put(i, count[i]);

if (13 == i) {

if (count[14 - i] > k) {

map.put(14 - i, count[14 - i]);

putList(k, list, map);

} else {

flag = 0;

putList(k, list, map);

}

}

} else if (count[i] <= k && flag == 1) {

flag = 0;

putList(k, list, map);

map = null;

}

}

if (list.size() > 0)

return list.get(list.lastKey());

else

return null;

}

private static void putList(int k, TreeMap<Integer, Map<Integer, Integer>> list, Map<Integer, Integer> map) {

if (0 == k && map.size() >= 5) {

list.put(map.size(), map);

}

if (1 == k && map.size() >= 3) {

list.put(2 * map.size(), map);

}

if (2 == k && map.size() >= 2) {

list.put(3 * map.size(), map);

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。