• LeetCode 1248 统计[优美子数组](jekyll迁移)


    layout: post
    title: LeetCode 1248 统计[优美子数组]
    date: 2019-11-04
    author: xiepl1997
    tags: 敲敲敲

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

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

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


    分析

    例如给出数组

    0 1 1 0 1 0 0 1 0
    

    给出 k = 3
    很容易可以得出的两个两端都为奇数的符合要求的子数组:

    (1)1 1 0 1
    and
    (2)1 0 1 0 0 1
    

    由此来进行扩展:

    首先对于(1),左端可以选择扩展 1 位或者不扩展,所以一共有 2 种选择。右端可以选择扩展 1 位、2 位或者不扩展,扩展 3 位的话就把第 7 位的“1”也收纳进来了,这样的话就包含了不止 3 个奇数了。

    所以(1)子数组有 2 * 3=6 种合法情况。

    对于(2),左端不能扩展,右端可以扩展 1 位或者不扩展。

    所以(2)子数组有 2 种合法情况。

    对于该例子,一共有 6+2=8 个优美子数组


    解决

    定义一个临时数组temp,用于存储数组中的奇数下标。

    还是对于数组0 1 1 0 1 0 0 1 0,它的temp数组为-1 1 2 4 7 9

    为什么temp数组两端分别为 -1 和 9 呢? -1 和 9 为数组的边界,对于(1),用它第一个奇数的下标减去 -1 这个边界,就等于(1)子数组的左边的可扩展数1-(-1)=2,而(1)右端的可扩展数为 7-4=3,所以以(1)子数组为窗口滑动产生的“优美子数组”个数为:

    (temp[i]-temp[i-1])*(temp[i+k]-temp[i+k-1])
    

    所以对temp数组进行遍历,对每个temp[i]使用上述方法计算将所有的个数加起来就是最后的解。

  • 相关阅读:
    qs.parse()、qs.stringify() 、JSON.stringify()以及JSON.parse()的区别
    Vue设置button的disable属性
    vue-preview用法详解
    解决MUI不支持js严格模式环境下使用的问题
    Vue.js的keep-alive用法
    详解在webpack中使用axios
    详解VS2012发布web api流程
    解决Python2中文ascii编码的方法
    防火墙问题 Linux系统 /etc/sysconfig/路径下无iptables文件
    本机连接虚拟机中docker启动的mysql数据库
  • 原文地址:https://www.cnblogs.com/xiepl1997/p/13479763.html
Copyright © 2020-2023  润新知