-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathFlags.java
More file actions
48 lines (43 loc) · 1.05 KB
/
Flags.java
File metadata and controls
48 lines (43 loc) · 1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class Flags {
public int solution(int[] A) {
boolean[] peaks = buildPeaks(A);
int[] nextPeaks = buildNextPeaks(peaks);
int maxFlagNum = 0;
for (int flagNum = 1; (flagNum - 1) * flagNum < A.length; flagNum++) {
if (canSetFlags(nextPeaks, flagNum)) {
maxFlagNum = Math.max(maxFlagNum, flagNum);
}
}
return maxFlagNum;
}
boolean[] buildPeaks(int[] A) {
boolean[] peaks = new boolean[A.length];
for (int i = 1; i < A.length - 1; i++) {
if (A[i] > A[i - 1] && A[i] > A[i + 1]) {
peaks[i] = true;
}
}
return peaks;
}
int[] buildNextPeaks(boolean[] peaks) {
int[] nextPeaks = new int[peaks.length];
int nextPeak = -1;
for (int i = nextPeaks.length - 1; i >= 0; i--) {
if (peaks[i]) {
nextPeak = i;
}
nextPeaks[i] = nextPeak;
}
return nextPeaks;
}
boolean canSetFlags(int[] nextPeaks, int flagNum) {
int index = 0;
for (int i = 0; i < flagNum; i++) {
if (index >= nextPeaks.length || nextPeaks[index] < 0) {
return false;
}
index = nextPeaks[index] + flagNum;
}
return true;
}
}