zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 525 连续数组

    525. 连续数组

    给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度)。

    示例 1:

    输入: [0,1]
    输出: 2
    说明: [0, 1] 是具有相同数量0和1的最长连续子数组。
    示例 2:

    输入: [0,1,0]
    输出: 2
    说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。

    注意: 给定的二进制数组的长度不会超过50000。

    PS:
    饶舌题目
    把0换成-1,相加,看为0的时候,最大长度,
    假如我这次为1,以后的和中又出现了1,那么我这一段是1和0的数量相等

    class Solution {
       public int findMaxLength(int[] nums) {
            int res = 0, sum = 0;
            for (int i = 0; i < nums.length; i++) {
                if (nums[i] == 0) {
                    nums[i] = -1;
                }
            }
            Map<Integer, Integer> map = new HashMap<>();
            for (int i = 0; i < nums.length; i++) {
                sum += nums[i];
                if (sum == 0 && i > res) {
                    res = i + 1;
                }
                if (map.containsKey(sum)) {
                    res = Math.max(i - map.get(sum), res);
                } else {
                    map.put(sum, i);
                }
            }
            return res;
        }
    }
    
  • 相关阅读:
    JavaScript条件判断和循环
    JavaScript数据类型详解
    Dockerfile使用
    让ie8、ie9支持媒体查询
    事件穿透
    判断是苹果手机还是安卓手机
    ES6中字符串的扩展
    ES6数组的扩展运算符
    let和const
    ES6中函数的扩展
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946406.html
Copyright © 2011-2022 走看看