当前位置: 首页 > news >正文

泰州哪家做网站建设比较好免费建站哪个网站最好

泰州哪家做网站建设比较好,免费建站哪个网站最好,大型网站 cms,网站聊天怎么做文章目录问题描述解题报告记录奇数位置滑动窗口前缀和实现代码记录奇数位置实现滑动窗口实现前缀和哈希表优化实现参考资料本文在别人的题解【链接列于参考资料中】基础上加上些许自己的理解,若侵权立删。问题描述 给你一个整数数组 nums 和一个整数 k。 如果某个…

文章目录

  • 问题描述
  • 解题报告
    • 记录奇数位置
    • 滑动窗口
    • 前缀和
  • 实现代码
    • 记录奇数位置实现
    • 滑动窗口实现
    • 前缀和+哈希表优化实现
  • 参考资料

本文在别人的题解【链接列于参考资料中】基础上加上些许自己的理解,若侵权立删。

问题描述

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

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

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

示例 1:

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

解题报告

记录奇数位置

我们发现,如果两个奇数之间(包含自身)一共包含了 k 个奇数,那么这 k 个奇数可以构成的连续子数组个数就是 左边连续的偶数 的个数加 1 乘以 右边连续的偶数 的个数加 1

所以 问题的关键就变成如何高效的求每个奇数前 连续的偶数 的个数

一种解决方案是记录每个奇数所在的位置,那么每个奇数前 连续的偶数 个数为当前奇数的位置减去上一个奇数的位置

另外在实现的时候需要注意一些细节问题,例如第一个奇数前 连续偶数的个数 如何求?最后一个奇数前 连续偶数的个数 如何求?

解决方案是:在最开始添加上虚拟位置 -1,在最后添加虚拟位置 n

最后遍历所有的 i, 将第 i1 作为起点,然后累加答案即可。

时间复杂度:O(n)O(n)O(n)
空间复杂度:O(n)O(n)O(n)

滑动窗口

仔细想一想,上面的思想完全可以用滑动窗口来实现,省去记录每个 1 的空间。

  • 移动窗口的右边界时,更新窗口内 1 出现的次数;
  • 当窗口内 1 的数目达到要求的 k 时,开始缩收左边界;
  • 移动左边界时,记录缩收过程遇到的 0 的个数 even,直到遇到 1
  • 累加当前的 even

时间复杂度:O(n)O(n)O(n)
空间复杂度:O(1)O(1)O(1)

前缀和

这种 做法 和 哈希表优化系列【空间换时间】-Leetcode 560.和为 K 的子数组 有些许相似之处,都用了前缀和。不同的其中一点是:在 Leetcode 560 中,由于前缀和存在负数的可能,所以需要用哈希表来存储前缀和,便于查找,但是此题中,前缀和的范围是可控的而且为正整数,所以我们完全可以将前缀和作为 vector 的索引来存储。

同样都是前缀和,但是具体实现上,我这种菜鸡,还是挺困难的。具体想法和滑动窗口有些相似。

实现代码

记录奇数位置实现

class Solution {
public:int numberOfSubarrays(vector<int>& nums, int k) {int n = nums.size();vector<int> pos;pos.push_back(-1);for (int i = 0; i < n; ++i) {if (nums[i]&1) pos.push_back(i);}pos.push_back(n);int res = 0, sz = pos.size();for (int i = 1; i+k < sz; ++i) {res += (pos[i] - pos[i-1]) * (pos[i+k] - pos[i+k-1]);}return res;}
};

滑动窗口实现

class Solution {
public:int numberOfSubarrays(vector<int>& nums, int k) {int n = nums.size();int res = 0, cnt = 0, even = 0;int l = 0, r = 0;while (r < n) {if (cnt < k && (nums[r++]&1)) cnt++;if (cnt == k) {even = 1;while (!(nums[l++]&1)) even++;cnt--;}res += even;}return res;}
};

前缀和+哈希表优化实现

class Solution {
public:int numberOfSubarrays(vector<int>& nums, int k) {int n = nums.size();vector<int> count(n+1, 0);count[0] = 1;int res = 0, odd = 0;for (int i = 0; i < n; ++i) {odd += nums[i]&1;if (odd >= k) res += count[odd-k];count[odd]++;}return res;}
};

参考资料

[1] Leetcode 1248. 统计「优美子数组」
[2] 【每日算法Day 107】面试必考:良心推荐,一题三解,不看后悔一辈子

http://www.lbrq.cn/news/2481805.html

相关文章:

  • 智博教育的网络营销是什么上海何鹏seo
  • 青海餐饮网站建设公司网络促销的方法有哪些
  • 36kr网站用什么做的软件开发培训机构排名
  • 在合肥哪里学网站建设网络营销出来可以干什么工作
  • 类似b站的网站怎么做的合肥网站推广公司哪家好
  • 北京软件开发公司排宁波seo网络推广咨询价格
  • 鞍山市做网站公司重庆网站优化排名推广
  • 南京网站制作站长工具在线
  • 专门做品牌折扣的网站查询网站相关网址
  • 稳健 安全的网站设计制作徐州seo顾问
  • 云南建设厅网站删除有什么公司要做推广的
  • 网站手机端建设上海网络推广招聘
  • 北海做网站公司长沙优化排名
  • 如何做网站搜索引擎优化搜索引擎优化主要包括
  • 品牌型网站制作哪如何快速推广自己的网站
  • app网站制作要多少费用做网站的外包公司
  • 电子商务网站开发公司批量查询权重
  • bootstrap风格网站佛山百度网站快速排名
  • 媒体135网站百度推广关键词怎么设置好
  • cms中文名称是什么seo快速排名优化
  • 宁波外贸seo网站建设长沙seo咨询
  • 室内设计说明200字郑州谷歌优化外包
  • 手机版网站优化宁波公司做网站
  • 做羞羞事的网站沙坪坝区优化关键词软件
  • 做ic的电子网站有哪些朋友圈推广平台
  • 2020年购物app排行湖北seo网站推广
  • 摘要 wordpressseod的中文意思
  • 学院网站建设申请报告免费培训seo
  • 免费行情软件网站直播网络营销专业大学排名
  • 旅游网站设计与分析网店seo是什么意思
  • CentOS 7 安装 MySQL 8.4.6(二进制包)指南
  • IntelliJ IDEA 中左上方未显示项目根目录问题
  • Go语言unsafe包深度解析
  • 顺应AI浪潮,电科金仓数据库再创辉煌
  • React中的antd的表格使用方法
  • SpringAOP的实现原理和场景