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

怎么做网站接口电商网

怎么做网站接口,电商网,政府网站旅游栏目建设,诸暨网站制作公司 网页文章目录 题目方法一&#xff1a;滑窗右端每次1&#xff0c;左端来回滑动方法二&#xff1a;&#xff08;最多K种的子串数&#xff09; - &#xff08;最多K-1种的子串数&#xff09; 恰好K种 题目 1 < nums.length < 20000 1 < nums[i], k < nums.length 方法一…

文章目录

  • 题目
  • 方法一:滑窗右端每次+1,左端来回滑动
  • 方法二:(最多K种的子串数) - (最多K-1种的子串数) = 恰好K种

题目

在这里插入图片描述
1 <= nums.length <= 20000
1 <= nums[i], k <= nums.length

方法一:滑窗右端每次+1,左端来回滑动

这道题初步看上去像滑窗。滑窗解决的问题是“最长”,比如找“无重复字符的最长子串”、“特定排列的子串”。通用方法就是滑窗右侧尽可能向右,直到滑窗内元素的个数不满足要求那么滑窗左侧右移。

本题考虑的不是“最多K个不同整数”,而是“恰好K个不同整数”。

我的办法(方法一)是先用滑窗找到“最多K个不同整数”的每个左右边界,然后对于这其中的每一个右边界,左边界“尝试右移”,找到全部合适的左边界。比如序列12123,对于第二个2来说,“最多2个不同整数”,就是1212,满足条件的左边界有3个,[1]212、[2]12、[1]2.

具体到代码实现,对于每一个右边界(即将加入滑窗)的值来说:

  1. 如果这个值曾经在滑窗中出现过,则把该值加入滑窗之后,滑窗内仍然是恰好K种数,那么pl“尝试右移”:cnt数组相应减少,直到遇到第一个将cnt的某个非零值减到0位置的位置tmp_pl,那么tmp-pl就是此时右边界对应所有左边界的个数。然后把pl~tmp_pl区间内的数再加回cnt数组(恢复)。
  2. 如果这个值没有在滑窗中出现,那么把该值加入滑窗之后,滑窗内就有K+1种数了,此时pl必须右移。右移到合适位置后,再进行1中的“尝试右移”操作。
class Solution {int cnt[20010] = {0};int ans = 0;public:int subarraysWithKDistinct(vector<int>& nums, int k) {int pl = 0, pr = 0, k2 = 0;// 先找k个不同的,定下初始滑窗位置 左闭右开for (; pr < nums.size() && k2 < k; pr++)if (++cnt[nums[pr]] == 1) k2++;if (k2 < k) return 0;ans++;// 开始滑动while (pr < nums.size()) {// 先尝试pl右移int tmp_pl = pl;while (cnt[nums[tmp_pl]] > 1) {ans++;cnt[nums[tmp_pl]]--; tmp_pl++;}// 恢复while (tmp_pl > pl) {tmp_pl--;cnt[nums[tmp_pl]]++;}// if 下一个数是旧数,加入if (cnt[nums[pr]] > 0) {cnt[nums[pr]]++; pr++;ans++;}// if 下一个数是新数,pl右移至窗内种类数-1else {cnt[nums[pr]]++; pr++;do {cnt[nums[pl]]--;pl++;} while (cnt[nums[pl - 1]] > 0);ans++;}}// 尝试pl右移int tmp_pl = pl;while (cnt[nums[tmp_pl]] > 1) {ans++;cnt[nums[tmp_pl]]--;tmp_pl++;}return ans;}
};

时间复杂度:最坏是Onn,但是实际还不错。
在这里插入图片描述

方法二:(最多K种的子串数) - (最多K-1种的子串数) = 恰好K种

这个方法是官方题解法。

还是12123,且K=2这个例子,对于1212来说,有3个左边界可以满足“恰好K种”,这个3是怎么算出来的呢?最多K-1种的左边界是1个,一共4个潜在的左边界,4-1=3.

(最多K种的子串数) - (最多K-1种的子串数) = 恰好K种

时间复杂度On

http://www.wangmingla.cn/news/156284.html

相关文章:

  • PHP网站开发有哪些框架营销策略范文
  • 长沙公司做网站大概多少钱网站关键词如何优化
  • dw做的网站能直接使用吗《新闻联播》今天
  • 做校招的网站有哪些西安关键词排名首页
  • 访客浏览网站 网站怎么跟踪网站优化排名操作
  • 做面食网站深圳网络推广网站
  • 做网站什么是解析什么是跳转百度seo搜搜
  • 中唯建设工程有限公司网站福州seo建站
  • php网站制作工具产品推广步骤
  • 做网站公司简介模版怎么打开网站
  • 网站建设维护协议书网页设计效果图及代码
  • 成都做网站设计哪家便宜seo经典案例
  • 广州网站运营专注乐云seo搜索引擎营销分析
  • 合肥网站建设王道下拉強达州seo
  • 深圳标识制作公司北京seoqq群
  • 云服务器建网站seo教程 seo之家
  • 全国二级建造师查询网站百度旗下有哪些app
  • 附近短期电脑培训班网站优化推广哪家好
  • 网站升级中模板游戏推广员判几年
  • 长安网站建设工作总结免费seo快速排名工具
  • 扁平化个人网站网站关键词挖掘
  • 美食杰网站的建设目的培训机构还能开吗
  • 做百科专用参考链接的网站石家庄关键词排名首页
  • 手机软件网站网络营销顾问
  • 做网站套餐2023年12月疫情又开始了吗
  • 邢台做移动网站的地方优化seo
  • 国外h5建站seo发贴软件
  • 做网站的心得体会关键词快速上首页排名
  • 美国有网站建设公司吗营销宣传图片
  • 百度地图排名怎么优化冯耀宗seo课程