1248. 统计「优美子数组」

知识点:数组;前缀和

题目描述

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

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

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

示例
输入:nums = [1,1,2,1,1], k = 3
输出:2
解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。 输入:nums = [2,4,6], k = 1
输出:0
解释:数列中不包含任何奇数,所以不存在优美子数组。 输入:nums = [2,2,2,1,2,2,1,2,2,2], k = 2
输出:16

解法一:前缀和

又是连续子序列,想前缀和,和560题:和为k的子数组有区别吗?其实是一模一样的。前者是子数组和为k,现在是子数组奇数个数为k,换汤不换药;直接前缀和+哈希表。

class Solution {
public int numberOfSubarrays(int[] nums, int k) {
Map<Integer,Integer> map = new HashMap<>();
map.put(0,1);
int count = 0;
int presum = 0;
for(int i = 0; i < nums.length; i++){
presum += nums[i] % 2; //统计奇数个数前缀和;
if(map.containsKey(presum-k)) count += map.get(presum-k);
map.put(presum, map.getOrDefault(presum, 0)+1);
}
return count;
}
}

时间复杂度:O(N);

体会

连续子数组,想前缀和。

最新文章

  1. phpmyadmin not found
  2. 自己动手模拟百分百&lt;select&gt;下拉列表
  3. 设置input(radio,checkbox)和lable对齐的问题
  4. MongoDB的安全性
  5. iOS利用代理实现界面跳转
  6. zoj 2100 Seeding
  7. jQuery File Upload 插件 php代码分析
  8. OWIN 为WebAPI
  9. Centos系统中彻底删除Mysql数据库
  10. inode满处理
  11. Tallest Cow POJ - 3263 (区间点修改)
  12. 采用xtrabackup部署主从同步
  13. php逐行读取.txt文件内容,并解析每行内容
  14. async和await用法(Task)
  15. java高并发解决方案
  16. markdown-to-html.min.js
  17. Docker学习5-Services – 服务(未完待续)
  18. Python 之Memcache中间件
  19. enabled和priority属性
  20. 通过javascript进行UTF-8编码

热门文章

  1. ADAS车辆在行人安全方面得分很低
  2. SpringCloud01:微服务概述
  3. vue keep-alive从列表页进入详情页,再返回列表页时,还是之前滚动的位置
  4. Spring Boot WebFlux-10——WebFlux 实战图书管理系统
  5. Flask一分钟Mock一个API
  6. 回顾Games101图形学(一)几何变换中一些公式的推导
  7. 使用Azure WebJob的一点心得
  8. Java 设置Word文本框中的文字旋转方向
  9. Unity3D学习笔记2——绘制一个带纹理的面
  10. 18、通过yum命令只下载rpm包不安装