Maximum Score of a Node Sequence LeetCode solution in Java

1
class Solution {
2
public int maximumScore(int[] scores, int[][] edges) {
3
int n = scores.length;
4

5
int[][] count = new int[n][6];
6
for (int[] edge : edges) {
7
int s = edge[0];
8
int e = edge[1];
9
if (count[s][0] == 0) {
10
count[s][1] = e;
11
count[s][0] = scores[e];
12
} else if (count[s][2] == 0) {
13
if (scores[e] > count[s][0]) {
14
count[s][3] = count[s][1];
15
count[s][2] = count[s][0];
16
count[s][1] = e;
17
count[s][0] = scores[e];
18
} else {
19
count[s][3] = e;
20
count[s][2] = scores[e];
21
}
22
} else if (scores[e] > count[s][4]) {
23
if (scores[e] > count[s][0]) {
24
count[s][5] = count[s][3];
25
count[s][4] = count[s][2];
26
count[s][3] = count[s][1];
27
count[s][2] = count[s][0];
28
count[s][1] = e;
29
count[s][0] = scores[e];
30
} else if (scores[e] > count[s][2]) {
31
count[s][5] = count[s][3];
32
count[s][4] = count[s][2];
33
count[s][3] = e;
34
count[s][2] = scores[e];
35
} else {
36
count[s][5] = e;
37
count[s][4] = scores[e];
38
}
39
}
40
if (count[e][0] == 0) {
41
count[e][1] = s;
42
count[e][0] = scores[s];
43
} else if (count[e][2] == 0) {
44
if (scores[s] > count[e][0]) {
45
count[e][3] = count[e][1];
46
count[e][2] = count[e][0];
47
count[e][1] = s;
48
count[e][0] = scores[s];
49
} else {
50
count[e][3] = s;
51
count[e][2] = scores[s];
52
}
53
} else if (scores[s] > count[e][4]) {
54
if (scores[s] > count[e][0]) {
55
count[e][5] = count[e][3];
56
count[e][4] = count[e][2];
57
count[e][3] = count[e][1];
58
count[e][2] = count[e][0];
59
count[e][1] = s;
60
count[e][0] = scores[s];
61
} else if (scores[s] > count[e][2]) {
62
count[e][5] = count[e][3];
63
count[e][4] = count[e][2];
64
count[e][3] = s;
65
count[e][2] = scores[s];
66
} else {
67
count[e][5] = s;
68
count[e][4] = scores[s];
69
}
70
}
71
}
72
int max = -1;
73
for (int[] edge : edges) {
74
int s = edge[0];
75
int e = edge[1];
76
int pos = scores[s] + scores[e];
77
int p1 = -1;
78
int p2 = -1;
79
boolean fine = true;
80
if (count[s][1] == e) {
81
if (count[s][2] == 0) fine = false;
82
p1 = count[s][3];
83
if (count[s][4] > 0) p2 = count[s][5];
84
} else if (count[s][3] == e) {
85
if (count[s][0] == 0) fine = false;
86
p1 = count[s][1];
87
if (count[s][4] > 0) p2 = count[s][5];
88
} else {
89
p1 = count[s][1];
90
if (count[s][0] == 0) fine = false;
91
if (count[s][2] > 0) p2 = count[s][3];
92
}
93
int p3 = -1;
94
int p4 = -1;
95
if (count[e][1] == s) {
96
if (count[e][2] == 0) fine = false;
97
p3 = count[e][3];
98
if (count[e][4] > 0) p4 = count[e][5];
99
} else if (count[e][3] == s) {
100
if (count[e][0] == 0) fine = false;
101
p3 = count[e][1];
102
if (count[e][4] > 0) p4 = count[e][5];
103
} else {
104
p3 = count[e][1];
105
if (count[e][0] == 0) fine = false;
106
if (count[e][2] > 0) p4 = count[e][3];
107
}
108
if (fine) {
109
if (p1 == p3) {
110
if (p4 > -1) max = Math.max(max, pos + scores[p1] + scores[p4]);
111
if (p2 > -1) max = Math.max(max, pos + scores[p1] + scores[p2]);
112
} else {
113
max = Math.max(max, pos + scores[p1] + scores[p3]);
114
}
115
}
116
}
117
return max;
118
}
119
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0