前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode|1248.优美子数组--C++题解

LeetCode|1248.优美子数组--C++题解

作者头像
Vaccae
发布2020-05-14 20:46:24
5610
发布2020-05-14 20:46:24
举报
文章被收录于专栏:微卡智享微卡智享

前言

上一篇《LeetCode|200.岛屿数量--C++题解》发布后,自己也做了相关的视频,由于是第一次做,感觉在整个视频的表达上还不够清晰,所以本篇也是花了不少功夫,将整个解题做为一个完整的视频输出,写了这么久的文章后,也要对自己的质量要求更高。所以从这篇开始,我更注重每篇文章的质量了,而且自己也开通了视频号的,所以文章我基本会以视频的方式呈现出来,让大家看了印象更深刻一些。

视频讲解

题目

微卡智享

解题思路

微卡智享

#

实现思路

1

首先遍历整个数组,找出所有的奇数的下标位置存放到新建的数组中

2

在新的奇数下标数组中再进行遍历

3

通过输入的K值(奇数个数),计算起始奇数前置有几个偶数,结束奇数中存在几个偶数

4

然后根据公式:x * y + x + y + 1,计算出当前奇数所含有的数组个数

5

重复第2步直接循环结束,最后输出总的个数

通过上面视频可以看到整个计算的过程。

代码实现

//LeetCode1248题 统计【优美子数组】//给你一个整数数组 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//输出:1//提示://1 <= nums.length <= 50000//1 <= nums[i] <= 10 ^ 5//1 <= k <= nums.length
//解题://1.遍历一次数组计算所有的奇数获取下标位//2.根据输入的K值计算奇数下标外侧左右的长度//3.根据递推出的公式 x*y+x+y+1算出数组

#include<iostream>#include<vector>
using namespace std;
int numberOfSubarrays(vector<int>&, int);
int main(int argc, char** argv) {  vector<int> nums = { 2,2,2,1,2,2,1,2,2,2 };
  numberOfSubarrays(nums, 2);
  return 0;}
int numberOfSubarrays(vector<int>& nums, int k){  int subarrays = 0;  vector<int> tmp;  //计算出所有奇数存入新的数组中  for (int i = 0; i < nums.size(); ++i) {    if (nums[i] & 1) tmp.push_back(i);  }
  for (int j = 0; j < tmp.size(); ++j) {    //启始下标    int beginidx = tmp[j];    //结束下标    int endidx = (j + k - 1 >= tmp.size()) ? -1 : tmp[j + k - 1];
    //当结束下标不为-1时开始计算数组个数,否则为0    if (endidx != -1) {      //计算当前数组的前面偶数个数      int x = (j == 0) ? beginidx : beginidx - tmp[j - 1] - 1;      //计算当前数组后面的偶数个数      int y = (j + k >= tmp.size()) ? nums.size() - tmp[j + k - 1] - 1 : tmp[j + k] - tmp[j + k - 1] - 1;
      //累加当前个数      subarrays += x * y + x + y + 1;    }  }
  return 0;}

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

本文分享自 微卡智享 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档