美文网首页
LintCode连续数组

LintCode连续数组

作者: Sczlog | 来源:发表于2019-02-11 15:23 被阅读3次

这个题目的名字翻译的不好,题意是:

给一个二进制数组,找到 0 和 1 数量相等的子数组的最大长度
样例
样例 1:
输入: [0,1]
输出: 2
解释: [0, 1] 是具有相等数量的 0 和 1 的最长子数组。
样例 2:
输入: [0,1,0]
输出: 2
解释: [0, 1] (或者 [1, 0]) 是具有相等数量 0 和 1 的最长子数组。
注意事项
给出的二进制数组的长度不会超过 50,000。

一个暴力型的O(n^3)的解法,妥妥的TLE:

const findMaxLength = function (nums) {
    // Write your code here
    var l = nums.length;
    while(l>0){
        for(var j = 0;j<=nums.length-l;j++){
            const filterLength = nums.filter((x,i)=>{
                    return x===1 && i>=j && i < l-j;
            }).length;
            if(l/2=== filterLength){
                return l;
            }
        }
        l--;
    }
    return 0;
}

最后将所有的0视为-1,题目就变成了求和为0的最小数组,同时如果以零点为起点,长度为i,j的子数组的和一样,那么以i为起点,j为末尾结点的子数组的和即为0,利用Map的性质,最后是O(n)复杂度的算法:

const findMaxLength = function (nums) {
    // Write your code here
    var dp = [0];
    for(let i = 1;i<=nums.length;i++){
        dp[i] = dp[i-1] + (nums[i-1]>0?1:-1);
    }
    var map = new Map();
    var max = 0;
    for(let i = 0; i<dp.length;i++){
        if(map.get(dp[i])!==undefined){
            max = Math.max(max,i-map.get(dp[i]));
        }else{
            map.set(dp[i],i);
        }
    }
    return max;
}

相关文章

  • LintCode连续数组

    这个题目的名字翻译的不好,题意是: 给一个二进制数组,找到 0 和 1 数量相等的子数组的最大长度样例样例 1:输...

  • 数组-最长上升连续子序列

    一、LintCode链接 最长上升连续子序列 二、问题描述 给定一个整数数组(下标从 0 到 n-1, n 表示整...

  • 数组利用前缀和求子数组问题

    1、子数组之和https://www.lintcode.com/problem/subarray-sum/desc...

  • lintcode 数组划分

    给出一个整数数组 nums 和一个整数 k。划分数组(即移动数组 nums 中的元素),使得:所有小于k的元素移到...

  • 最大子数组

    最大子数组(lintcode 41) 描述:给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。样例:给出...

  • lintcode 最大子数组||

    给定一个整数数组,找出两个 不重叠 子数组使得它们的和最大。每个子数组的数字在数组中的位置应该是连续的。返回最大的...

  • lintcode 最大子数组|||

    给定一个整数数组和一个整数 k,找出 k 个不重叠子数组使得它们的和最大。每个子数组的数字在数组中的位置应该是连续...

  • lintcode 最小子数组

    给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。样例给出数组[1, -1, -2, 1],返回 -3解...

  • lintcode 最大子数组

    给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。样例给出数组[−2,2,−3,4,−1,2,1,−5,...

  • 【数组】--零子数组、最大连续子数组、数字连续子数组

    零子数组:对于长度为N的数组,求连续子数组和和最接近0的值和子数组最大连续子数组:给定一个数组A,求A的连续子数组...

网友评论

      本文标题:LintCode连续数组

      本文链接:https://www.haomeiwen.com/subject/toyqeqtx.html