mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-04 08:02:30 +08:00
49 lines
645 B
Go
49 lines
645 B
Go
package leetcode
|
|
|
|
func threeEqualParts(A []int) []int {
|
|
n, ones, i, count := len(A), 0, 0, 0
|
|
for _, a := range A {
|
|
ones += a
|
|
}
|
|
if ones == 0 {
|
|
return []int{0, n - 1}
|
|
}
|
|
if ones%3 != 0 {
|
|
return []int{-1, -1}
|
|
}
|
|
k := ones / 3
|
|
for i < n {
|
|
if A[i] == 1 {
|
|
break
|
|
}
|
|
i++
|
|
}
|
|
start, j := i, i
|
|
for j < n {
|
|
count += A[j]
|
|
if count == k+1 {
|
|
break
|
|
}
|
|
j++
|
|
}
|
|
mid := j
|
|
j, count = 0, 0
|
|
for j < n {
|
|
count += A[j]
|
|
if count == 2*k+1 {
|
|
break
|
|
}
|
|
j++
|
|
}
|
|
end := j
|
|
for end < n && A[start] == A[mid] && A[mid] == A[end] {
|
|
start++
|
|
mid++
|
|
end++
|
|
}
|
|
if end == n {
|
|
return []int{start - 1, mid}
|
|
}
|
|
return []int{-1, -1}
|
|
}
|