package amazon.papertest1; public class MaxCommSumCounterLessMemory implements IMaxCommSumCounter { @Override public int countSum(int[] input) { if (input == null || input.length == 0) { return -1; } quickSort(input, 0, input.length); int maxTimes = 0; int number = 0; int cTimes = 1; int cNumber = input[0]; for (int i = 1, len = input.length; i < len; i++) { int c = input[i]; if (c == cNumber) { cTimes++; continue; } if ((cTimes > maxTimes) || (cNumber > number && cTimes == maxTimes)) { maxTimes = cTimes; number = cNumber; cTimes = 1; cNumber = c; } } return maxTimes * number; } /** * quick sort from small to big * * @param input * @param start * @param end */ private void quickSort(int[] input, int start, int end) { if (start >= end) { return; } int st = input[start]; int p = start; for (int i = start + 1; i < end; i++) { if (st > input[i]) { input[p] = input[i]; p++; input[i] = input[p]; } } input[p] = st; quickSort(input, start, p - 1); quickSort(input, p + 1, end); } }