• 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;
        }
    }
    
  • 相关阅读:
    怀念
    红颜知己
    我的孩子们
    10月22日
    Movies
    vue返回上一页效果(this.$router.go、)
    Java随笔
    Java随笔
    java随笔
    java随笔
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075537.html
Copyright © 2020-2023  润新知