Get Biggest Three Rhombus Sums in a Grid LeetCode solution in Java

1
class Solution {
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);
7
}
8

9
Arrays.sort(maxThree);
10

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]};
15
}
16
return new int[] {maxThree[2], maxThree[1]};
17
}
18

19
// reverse array
20
maxThree[0] = maxThree[0] ^ maxThree[2];
21
maxThree[2] = maxThree[0] ^ maxThree[2];
22
maxThree[0] = maxThree[0] ^ maxThree[2];
23

24
return maxThree;
25
}
26

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));
34
}
35
}
36
}
37
}
38

39
/*
40
get sum of edges of rhombus abcd
41
a
42
/ \
43
d b
44
\ /
45
c
46

47
*/
48
int getSum(int[][] grid, int i, int j, int length) {
49
if (length == 0) {
50
return grid[i][j];
51
}
52

53
int sum = 0;
54
// edge ab
55
for (int it = 0; it <= length; it++) {
56
sum = sum + grid[i + it][j + it];
57
}
58

59
// edge ad
60
for (int it = 1; it <= length; it++) {
61
sum = sum + grid[i + it][j - it];
62
}
63

64
// edge dc
65
for (int it = 1; it <= length; it++) {
66
sum = sum + grid[i + length + it][j - length + it];
67
}
68

69
// edge bc
70
for (int it = 1; it < length; it++) {
71
sum = sum + grid[i + length + it][j + length - it];
72
}
73

74
return sum;
75
}
76

77
void addToMaxThree(int[] maxThree, int num) {
78
// Do not add duplicate entry
79
if (maxThree[0] == num || maxThree[1] == num || maxThree[2] == num) {
80
return;
81
}
82

83
Arrays.sort(maxThree);
84

85
if (maxThree[0] < num) {
86
maxThree[0] = num;
87
}
88
}
89
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0