2
public int[] getBiggestThree(int[][] grid) {3
int end = Math.min(grid.length, grid[0].length);4
int maxThree[] = {0, 0, 0};5
for (int length = 0; length < end; length++) {6
searchBigThree(grid, maxThree, length);11
// If there are less than three distinct values, return all of them.12
if (maxThree[0] == 0) {13
if (maxThree[1] == 0) {14
return new int[] {maxThree[2]};16
return new int[] {maxThree[2], maxThree[1]};20
maxThree[0] = maxThree[0] ^ maxThree[2];21
maxThree[2] = maxThree[0] ^ maxThree[2];22
maxThree[0] = maxThree[0] ^ maxThree[2];27
void searchBigThree(int[][] grid, int[] maxThree, int length) {28
int end = grid.length - (length == 0 ? 0 : 2 * length);29
int end1 = grid[0].length - (length);30
for (int start = 0; start < end; start++) {31
for (int start1 = length; start1 < end1; start1++) {32
if (start + start1 >= length) {33
addToMaxThree(maxThree, getSum(grid, start, start1, length));40
get sum of edges of rhombus abcd48
int getSum(int[][] grid, int i, int j, int length) {55
for (int it = 0; it <= length; it++) {56
sum = sum + grid[i + it][j + it];60
for (int it = 1; it <= length; it++) {61
sum = sum + grid[i + it][j - it];65
for (int it = 1; it <= length; it++) {66
sum = sum + grid[i + length + it][j - length + it];70
for (int it = 1; it < length; it++) {71
sum = sum + grid[i + length + it][j + length - it];77
void addToMaxThree(int[] maxThree, int num) {78
// Do not add duplicate entry79
if (maxThree[0] == num || maxThree[1] == num || maxThree[2] == num) {83
Arrays.sort(maxThree);85
if (maxThree[0] < num) {