【LeetCode每日一题】——1248.统计「优美子数组」

news/2024/12/29 13:20:30/

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 滑动窗口

二【题目难度】

  • 中等

三【题目编号】

  • 1248.统计「优美子数组」

四【题目描述】

  • 给你一个整数数组 nums 和一个整数 k。如果某个连续子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。
  • 请返回这个数组中 「优美子数组」 的数目。

五【题目示例】

  • 示例 1:

    • 输入:nums = [1,1,2,1,1], k = 3
    • 输出:2
    • 解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。
  • 示例 2:

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

    • 输入:nums = [2,2,2,1,2,2,1,2,2,2], k = 2
    • 输出:16

六【题目提示】

  • 1 < = n u m s . l e n g t h < = 50000 1 <= nums.length <= 50000 1<=nums.length<=50000
  • 1 < = n u m s [ i ] < = 1 0 5 1 <= nums[i] <= 10^5 1<=nums[i]<=105
  • 1 < = k < = n u m s . l e n g t h 1 <= k <= nums.length 1<=k<=nums.length

七【解题思路】

  • 利用滑动窗口的思想
  • 记录数组中奇数的索引下标,将所有奇数的索引下标存储到新的数组中,长度需要在之前的基础上加2,用来保持左窗口边界和右窗口边界,新加的两个位置分别位于新数组的最左边和最右边
  • 每个窗口中的奇数的数量刚好满足题意,此时还可以继续向左右拓展,就需要移动左右窗口,左右拓展到奇数停止,如果不停止就不满足题目要求的奇数个数
  • 位于最左边和最右边的值为了计算到不拓展的情况,否则会忽略这种情况
  • 然后把左边拓展的情况数乘以右边拓展的情况数,就是最终此位置满足要求的窗口个数,也就是满足要求的子数组个数
  • 然后汇总每次的结果
  • 最后返回结果即可

八【时间频度】

  • 时间复杂度: O ( n ) O(n) O(n) n n n为传入数组的大小
  • 空间复杂度: O ( 1 ) O(1) O(1)

九【代码实现】

  1. Java语言版
class Solution {public int numberOfSubarrays(int[] nums, int k) {int res = 0;int len = nums.length;int[] index = new int[len + 2];int odd_count = 0;for(int i = 0;i<len;i++){if((nums[i] & 1) == 1){index[++odd_count] = i;}}index[0] = -1;index[odd_count + 1] = len;for(int i = 1;i + k < odd_count + 2;i++){res += (index[i] - index[i - 1]) * (index[i + k] - index[i + k - 1]);}return res;}
}
  1. C语言版
int numberOfSubarrays(int* nums, int numsSize, int k)
{int len = numsSize;int* index = (int*)malloc(sizeof(int) * (len + 2));int odd_count = 0;int res = 0;for(int i = 0;i<len;i++){if((nums[i] & 1) == 1){index[++odd_count] = i;}}index[0] = -1;index[odd_count + 1] = len;for(int i = 1;i + k<odd_count + 2;i++){res += (index[i] - index[i - 1]) * (index[i + k] - index[i + k - 1]);}return res;
}
  1. Python语言版
class Solution:def numberOfSubarrays(self, nums: List[int], k: int) -> int:size = len(nums)res = 0index = [-1]for i in range(0,size):if nums[i] & 1 == 1:index.append(i)index.append(size)for i in range(1,len(index) - k):res += (index[i] - index[i - 1]) * (index[i + k] - index[i + k - 1])return res
  1. C++语言版
class Solution {
public:int numberOfSubarrays(vector<int>& nums, int k) {int len = nums.size();int* index = (int*)malloc(sizeof(int) * (len + 2));int odd_count = 0;int res = 0;for(int i = 0;i<len;i++){if((nums[i] & 1) == 1){index[++odd_count] = i;}}index[0] = -1;index[odd_count + 1] = len;for(int i = 1;i + k<odd_count + 2;i++){res += (index[i] - index[i - 1]) * (index[i + k] - index[i + k - 1]);}return res;}
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述


http://www.ppmy.cn/news/150930.html

相关文章

6.S081——陷阱部分(内核陷阱)——xv6源码完全解析系列(6)

0.briefly speaking 点此跳转到上一篇博客 在上一篇博客中&#xff0c;我们通过系统调用这个重要的机制了解了Xv6操作系统中用户态陷阱的处理全流程。这篇博客则准备研究一下内核陷阱的处理流程&#xff0c;在研究内核陷阱流程中一个麻烦的家伙是定时器中断&#xff0c;首先它…

安卓屏幕信息基础知识复习

安卓中 像素/分辨率/密度/倍数/尺寸的区别和关系 在Android中&#xff0c;像素&#xff08;px&#xff09;、分辨率、密度&#xff08;dpi&#xff09;和尺寸之間存在著密切的關係。 **像素&#xff08;px&#xff09;**是屏幕上顯示圖像的最小單位。每個像素都可以顯示一種顏…

向量数据库:使用Elasticsearch实现向量数据存储与搜索

向量数据库&#xff1a;使用Elasticsearch实现向量数据存储与搜索 向量数据库&#xff1a;使用Elasticsearch实现向量数据存储与搜索一、简介二、实验前准备2.1 创建索引设置向量字段2.2 写入数据 三、向量计算函数3.1 余弦相似度&#xff1a;cosineSimilarity3.2 计算点积&…

js获取html input 单选框值的问题

测试代码&#xff1a; ratio.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"ratio.js"></script> </head> <body><input…

Nginx通过SplitClient进行AB测试以及负载均衡分流

文章目录 前言一、Split Clients是什么&#xff1f;二、使用步骤2.1 根据User-Agent进行分流2.2 根据Cookie进行分流2.3 根据IP地址进行分流2.4 根据时间进行分流2.5 根据随机数进行分流 总结 前言 Nginx是一个被广泛应用的Web服务中间件&#xff0c;今天分享一下如何用它做AB…

继电器带大功率容性负载,启动过程拉弧解决办法

1.选择固态继电器&#xff0c;没有火花了&#xff0c;价格贵。 2.单个200w开关电源&#xff0c;通电瞬间就有40A左右的电流&#xff0c; 建议选择大容量的触点。 3.分时启动&#xff0c;选择不同梯度的延时继电器。我目前用的是这种。 4.并联RC吸收&#xff0c;但是效果不明显。…

600W个微信红包封面,人人都能领取到!!!

过年啦&#xff0c;祝大家春节快乐 牛年大吉&#xff0c;万事如意&#xff01; 别忘了春节还有红包封面领取 新的一年愿大家财运亨通&#xff01; 新年过完了&#xff0c;整理情绪上班了&#xff0c;祝福没有断&#xff0c;问候也依然。努力工作多表现&#xff0c;年后年终奖永…

600W 28KHZ/40KHZ 超声波电路线路板PCB设计

600W 28KHZ/40KHZ 超声波电路线路板PCB采用高精度的运行芯片&#xff0c;在追频率的速度和精度来说得到了很大的提高&#xff0c;特别是水位发生变化或者有清洗篮子的时候能快速找到频率。由于采用了高精度的运行芯片在很多的功能上可以实现&#xff0c;特别是脉冲超声波和加强…