java 找到具有相等数字1和0的最大长度子阵列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 找到具有相等数字1和0的最大长度子阵列相关的知识,希望对你有一定的参考价值。

import java.util.*;
public class MaxSubArrayEqual1sAnd0s {
    public static void main(String args[]) {
        MaxSubArrayEqual1sAnd0s maxSubArray = new MaxSubArrayEqual1sAnd0s();
        int[][] input = {
          null,
          {},
          {0},
          {1},
          {1,0},
          {0,1,0},
          {0,0,1,0,1,0,0}
        };
        for(int i=0; i< input.length; i++) {
            System.out.println("Input: " + Arrays.toString(input[i]) + ", Result: " + Arrays.toString(maxSubArray.maxLengthArray(input[i])));
        }
    }
    
    public int[] maxLengthArray(int[] input) {
        if(input == null || input.length == 0) {
            return input;
        }
        // CurrentSum, Index
        Map<Integer, Integer> sumIndexTracker = new HashMap<>();
        // To address input array which begins with 0
        sumIndexTracker.put(0,-1);
        int currentSum = 0;
        int start = 0;
        int end = 0; 
        int maxLen = 0;
        for(int i=0; i< input.length; i++) {
            int currentValue = (input[i] == 0) ? -1:1;
            currentSum += currentValue;
            
            if(!sumIndexTracker.containsKey(currentSum)) {
                sumIndexTracker.put(currentSum, i);
            } else {
                if(maxLen < i - sumIndexTracker.get(currentSum)) {
                    start = sumIndexTracker.get(currentSum) + 1;
                    end = i;
                    maxLen = end - start + 1;
                }
            }
        }
        return extract(input, start, end);
    }
    
    private int[] extract(int[] input, int start, int end) {
        int[] extracted = new int[end - start + 1];
        int j = 0;
        for(int i=start; i<= end; i++) {
            extracted[j++] = input[i];
        }
        return extracted;
    }
}

以上是关于java 找到具有相等数字1和0的最大长度子阵列的主要内容,如果未能解决你的问题,请参考以下文章

最大子阵列和

java求最长公共子串的长度

c_cpp 最大子阵列总和。在具有最大总和的数组(包含至少一个数字)中查找连续的子数组。

如何找到具有最小k长度和最大和的子数组?

两个字符串查找最大公共子串

POJ1743 Musical Theme