连续数组

连续数组

传送门

  • 前缀和+哈希
/**
 * @param {number[]} nums
 * @return {number}
 */
var findMaxLength = function(nums) {
    let cnt = 0 , mx = 0;
    let mp = new Map();
      nums.forEach((d,i)=>{
          cnt += (d===1);
          cnt -= (d===0);
          if(cnt === 0) mx = Math.max(i+1,mx);
          if(mp.has(cnt)) {
              let tmp = mp.get(cnt);
              mx = Math.max(i-tmp,mx);
          }
          else mp.set(cnt,i);
      })
    return mx ;
};

PS:感觉貌似一般求连续XX的时候,通常会用到前缀和的方式。。之后为了避免tle,可能会用到哈希表之类的数据结构+题目的各种特性 来进行优化。。然鹅这道题对cnt的处理倒是让我想到了那个"投票算法"。。贴个链接

posted @ 2021-06-03 09:58  Calculus9  阅读(43)  评论(0编辑  收藏  举报