前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每日两题 T30

每日两题 T30

作者头像
合一大师
发布2020-07-20 09:54:18
2260
发布2020-07-20 09:54:18
举报
文章被收录于专栏:JavaScript全栈

算法

LeetCode T1248. 统计「优美子数组」[1]

描述

给你一个整数数组 nums 和一个整数 k

如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」

请返回这个数组中「优美子数组」的数目。

示例 1:

代码语言:javascript
复制
输入:nums = [1,1,2,1,1], k = 3
输出:2
解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。

示例 2:

代码语言:javascript
复制
输入:nums = [2,4,6], k = 1
输出:0
解释:数列中不包含任何奇数,所以不存在优美子数组。

示例3:

代码语言:javascript
复制
输入:nums = [2,2,2,1,2,2,1,2,2,2], k = 2
输出:16

提示:

1 <= nums.length <= 500001 <= nums[i] <= 10^51 <= k <= nums.length

分析

巧妙解法,详细直接上代码。

代码

代码语言:javascript
复制
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
const numberOfSubarrays = (nums, k) => {
  let n = nums.length, counts = new Array(n + 1).fill(0).fill(1, 0, 1), oddCount = 0, result = 0
  for (let i = 0; i < n; i++) {
    oddCount += nums[i] & 1
    result += oddCount >= k ? counts[oddCount - k] : 0
    counts[oddCount] += 1
  }
  return result
}

前端

使用this的典型例子

•Implicit binding:

代码语言:javascript
复制
var b = {
    a: function() {
        console.log(this);
    }
}
b.a();
// this is b

•Explicit binding:

代码语言:javascript
复制
b.a.call(this); // this is window

•new binding

代码语言:javascript
复制
function B() { 
    this.a = function() {console.log(this.b)}, 
    this.b = 1
}
let b = new B();
b.a();
// this is b object;

•window binding

代码语言:javascript
复制
var a = 1;
this.a;

References

[1] 1248. 统计「优美子数组」: https://leetcode-cn.com/problems/count-number-of-nice-subarrays/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JavaScript全栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算法
    • LeetCode T1248. 统计「优美子数组」[1]
      • 描述
        • 分析
          • 代码
            • 前端
              • 使用this的典型例子
                • References
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档