算法-11未排序数组中累加和为给定值的最长子数组系列问题补2
描述
给定一个无序数组arr,其中元素只能是1或0。求arr所有的子数组中0和1个数相等的最长子数组的长度 [要求] 时间复杂度为O(n)O(n),空间复杂度为O(n)O(n)输入描述:
第一行一个整数N,表示数组长度接下来一行有N个数表示数组中的数
输出描述:
输出一个整数表示答案示例1
输入: 5 1 0 1 0 1 输出: 4
思路
定义一个平衡因子key,遇到一个1就自增,遇到一个0就自减。遍历数组更新这个平衡因子,用一个哈希表记录0~i位置的平衡因子,我们可以知道对于一段数组arr[0:j],如果它的平衡因子为balance,且存在某个前面的位置iimport java.util.Scanner;
import java.util.HashMap;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for(int i=0;i