525.contiguous-array.go 348 B

12345678910111213141516171819202122
  1. func findMaxLength(nums []int) int {
  2. n := len(nums)
  3. if n < 2 {
  4. return 0
  5. }
  6. dp := make([]int, n+1)
  7. for i := range nums {
  8. if nums[i] == 0 {
  9. dp[i+1] = dp[i]
  10. } else {
  11. dp[i+1] = dp[i] + 1
  12. }
  13. }
  14. for l := n / 2 * 2; 2 <= l; l -= 2 {
  15. for i := n; 0 <= i-l; i-- { // On^2
  16. if dp[i]-dp[i-l] == l/2 {
  17. return l
  18. }
  19. }
  20. }
  21. return 0
  22. }