for i, num in enumerate(nums): new_diff = diff_pre[-1] + (1if num & 1else-1) diff_pre.append(new_diff) new_xor = x_or_pre[-1] ^ num x_or_pre.append(new_xor) pair = (new_diff, new_xor) if pair notin seen: seen[pair] = i
ans = 0 n = len(nums) for i in range(n): cnt = diff_pre[i + 1] curr_xor = x_or_pre[i + 1] pair = (cnt, curr_xor) if pair in seen: j = seen[pair] ans = max(ans, i - j) return ans
classSolution{ publicintmaxBalancedSubarray(int[] nums){ int n = nums.length; int[] xOrPre = newint[n + 1]; int[] diffPre = newint[n + 1]; Map<String, Integer> seen = new HashMap<>(); seen.put("0,0", -1);
for (int i = 0; i < n; i++) { int num = nums[i]; diffPre[i + 1] = diffPre[i] + ((num & 1) == 1 ? 1 : -1); xOrPre[i + 1] = xOrPre[i] ^ num; String pair = diffPre[i + 1] + "," + xOrPre[i + 1]; if (!seen.containsKey(pair)) { seen.put(pair, i); } }
int ans = 0; for (int i = 0; i < n; i++) { String pair = diffPre[i + 1] + "," + xOrPre[i + 1]; if (seen.containsKey(pair)) { int j = seen.get(pair); ans = Math.max(ans, i - j); } } return ans; } }
var maxBalancedSubarray = function (nums) { const n = nums.length; const xOrPre = newArray(n + 1).fill(0); const diffPre = newArray(n + 1).fill(0); const seen = newMap(); seen.set("0,0", -1);
for (let i = 0; i < n; i++) { const num = nums[i]; diffPre[i + 1] = diffPre[i] + (num & 1 ? 1 : -1); xOrPre[i + 1] = xOrPre[i] ^ num; const pair = `${diffPre[i + 1]},${xOrPre[i + 1]}`; if (!seen.has(pair)) { seen.set(pair, i); } }
let ans = 0; for (let i = 0; i < n; i++) { const pair = `${diffPre[i + 1]},${xOrPre[i + 1]}`; if (seen.has(pair)) { const j = seen.get(pair); ans = Math.max(ans, i - j); } } return ans; };
funcmaxBalancedSubarray(nums []int)int { n := len(nums) xOrPre := make([]int, n+1) diffPre := make([]int, n+1) seen := make(map[string]int) seen["0,0"] = -1
for i := 0; i < n; i++ { num := nums[i] if num&1 == 1 { diffPre[i+1] = diffPre[i] + 1 } else { diffPre[i+1] = diffPre[i] - 1 } xOrPre[i+1] = xOrPre[i] ^ num pair := strconv.Itoa(diffPre[i+1]) + "," + strconv.Itoa(xOrPre[i+1]) if _, exists := seen[pair]; !exists { seen[pair] = i } }
ans := 0 for i := 0; i < n; i++ { pair := strconv.Itoa(diffPre[i+1]) + "," + strconv.Itoa(xOrPre[i+1]) if j, exists := seen[pair]; exists { if i-j > ans { ans = i - j } } } return ans }
for i, num in enumerate(nums): new_diff = diff_pre[-1] + (1if num & 1else-1) diff_pre.append(new_diff) new_xor = x_or_pre[-1] ^ num x_or_pre.append(new_xor) pair = (new_diff, new_xor) if pair notin seen: seen[pair] = i
ans = 0 n = len(nums) for i in range(n): cnt = diff_pre[i + 1] curr_xor = x_or_pre[i + 1] pair = (cnt, curr_xor) if pair in seen: j = seen[pair] ans = max(ans, i - j) return ans
classSolution{ publicintmaxBalancedSubarray(int[] nums){ int n = nums.length; int[] xOrPre = newint[n + 1]; int[] diffPre = newint[n + 1]; Map<String, Integer> seen = new HashMap<>(); seen.put("0,0", -1);
for (int i = 0; i < n; i++) { int num = nums[i]; diffPre[i + 1] = diffPre[i] + ((num & 1) == 1 ? 1 : -1); xOrPre[i + 1] = xOrPre[i] ^ num; String pair = diffPre[i + 1] + "," + xOrPre[i + 1]; if (!seen.containsKey(pair)) { seen.put(pair, i); } }
int ans = 0; for (int i = 0; i < n; i++) { String pair = diffPre[i + 1] + "," + xOrPre[i + 1]; if (seen.containsKey(pair)) { int j = seen.get(pair); ans = Math.max(ans, i - j); } } return ans; } }
var maxBalancedSubarray = function (nums) { const n = nums.length; const xOrPre = newArray(n + 1).fill(0); const diffPre = newArray(n + 1).fill(0); const seen = newMap(); seen.set("0,0", -1);
for (let i = 0; i < n; i++) { const num = nums[i]; diffPre[i + 1] = diffPre[i] + (num & 1 ? 1 : -1); xOrPre[i + 1] = xOrPre[i] ^ num; const pair = `${diffPre[i + 1]},${xOrPre[i + 1]}`; if (!seen.has(pair)) { seen.set(pair, i); } }
let ans = 0; for (let i = 0; i < n; i++) { const pair = `${diffPre[i + 1]},${xOrPre[i + 1]}`; if (seen.has(pair)) { const j = seen.get(pair); ans = Math.max(ans, i - j); } } return ans; };
funcmaxBalancedSubarray(nums []int)int { n := len(nums) xOrPre := make([]int, n+1) diffPre := make([]int, n+1) seen := make(map[string]int) seen["0,0"] = -1
for i := 0; i < n; i++ { num := nums[i] if num&1 == 1 { diffPre[i+1] = diffPre[i] + 1 } else { diffPre[i+1] = diffPre[i] - 1 } xOrPre[i+1] = xOrPre[i] ^ num pair := strconv.Itoa(diffPre[i+1]) + "," + strconv.Itoa(xOrPre[i+1]) if _, exists := seen[pair]; !exists { seen[pair] = i } }
ans := 0 for i := 0; i < n; i++ { pair := strconv.Itoa(diffPre[i+1]) + "," + strconv.Itoa(xOrPre[i+1]) if j, exists := seen[pair]; exists { if i-j > ans { ans = i - j } } } return ans }