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

[算法练习]Day 7: 变长滑动窗口

        变长滑动窗口就先练这么多吧

2958. 最多 K 个重复元素的最长子数组

        思路类似,代码简洁,先插入在判断,这里左指针移动的逻辑使用while会更加简洁一些。

class Solution {
public:int maxSubarrayLength(vector<int>& nums, int k) {int ans = 0;unordered_map<int,int>umap;int left = 0;for(int right = 0;right < nums.size();right++){int n = nums[right];// 先插入右指针对应的元素umap[n]++;// 判断是否需要移动左指针while(umap[n] > k){umap[nums[left]]--;left++;}ans = max(ans,right-left+1);}return ans;}
};

2024. 考试的最大困扰度

        和灵神的思路是一样的,但是我写的好累赘,,二进制次位有点不熟悉

class Solution {
public:int maxConsecutiveAnswers(string answerKey, int k) {int ans = 0;// 大小为2,初始值为0unordered_map<char,int>umap;int temp = 0;int left = 0;umap['T'] = 0;umap['F'] = 0;for(int right = 0;right < answerKey.size();right++){umap[answerKey[right]]++;temp++;while(min(umap['T'] , umap['F']) > k){umap[answerKey[left]]--;left++;temp--;}ans = max(ans,temp);}return ans;}
};

1004. 最大连续1的个数 III

        和上一个题的思路一摸一样,就是注意存储数据的方式

class Solution {
public:int longestOnes(vector<int>& nums, int k) {int ans = 0;int left = 0;int cnt = 0;int flag[2] = {0};for(int right = 0;right < nums.size();right++){int n = nums[right];flag[n]++;cnt++;while(flag[0] > k){flag[nums[left]]--;cnt--;left++;}ans = max(ans,cnt);}return ans;}
};

1658. 将 x 减到 0 的最小操作数

        和之前有一个题非常的相似,也是求两侧的值,这种题都可以反着做,即变为滑动窗口问题(不定长双指针)

class Solution {
public:int minOperations(vector<int>& nums, int x) {int ans = INT_MAX;// 反着做,找最长的子数组int sum = 0;for(auto n:nums)sum += n;int max_long = 0;int left = 0;for(int right = 0;right < nums.size();right++){max_long += nums[right];while( (max_long > (sum - x)) && (left <= right)){max_long -= nums[left];left++;}if(max_long == (sum - x)) ans = min((int)nums.size() - (right - left + 1) , ans);}return (ans == INT_MAX)?-1:ans;}
};

1208. 尽可能使字符串相等

原来这个题的两个字符串是对齐的,这就导致这个题就变成了正常的双指针的问题

class Solution {
public:int equalSubstring(string s, string t, int maxCost) {// 这个题貌似和我想得不一样int ans = 0;int cost = 0;int left = 0;for(int right = 0;right < s.size();right++){cost += abs(s[right] - t[right]);while(cost > maxCost){cost -= abs(s[left] - t[left]);left++;}ans = max(ans,right - left + 1);}return ans ;}
};

2730. 找到最长的半重复子字符串

        这个不需要用到哈希,要考虑好。写习惯了上来就想用哈希

class Solution {
public:int longestSemiRepetitiveSubstring(string s) {int ans = 0;int left = 0;int cnt = 0;for(int right = 0;right < s.size();right++){if((right > left) && s[right] == s[right-1]) cnt++;while(cnt > 1){if((right > left)  && s[left] == s[left+1]) cnt--;left++;}ans = max(ans,right-left+1);}return ans;}
};

http://www.dtcms.com/a/471767.html

相关文章:

  • 才做的网站怎么搜不到做企业礼品的网站
  • 做绿植o2o网站怎么样建设学校网站需要具备
  • 做分享衣服网站的初衷是什么网站架构包括哪些
  • 做网站建设公司企业长沙精品网站建设公司
  • 平价建网站适合乡镇的小型加工厂
  • 网站嵌入地图WordPress去掉新闻
  • 火山开发软件可以开发网站吗wordpress官方
  • 广州市城乡和建设局网站蓝色网站源码
  • 单页展示网站北京品牌建设网站
  • 河南网站建设哪家公司好贵州网站公司
  • 在Edge、Chrome浏览器上安装uBlock Origin插件
  • 合肥专业网站制作设计广西最新一批违法领导
  • 湖南建设厅官方网站官网宁波做网站优化哪家好
  • 做谱的网站企业建设网站流程图
  • php网站开发模式有哪些做本地的门户网站
  • 大语言模型与人类、程序的核心区别
  • 什么网站做软文wordpress被屏蔽了api
  • 购物网站一般分几大模块做期货的的都喜欢去什么网站
  • 深入解析PDCP协议:5G与LTE中的核心数据汇聚层
  • 保定网站制作报价网页设计实训报告三个步骤
  • SAM-SAM2-SAM3系列(三):Segment Anything 3(SAM 3)技术详解,以及SAM3对 SAM2的升级点
  • 网站怎么改版自适应如何重新安装电脑上的wordpress
  • 织梦怎么做的网站云南昆明网络公司有哪些
  • 中国建设银行上海分行信息网站广西网站建设企业
  • 房地产公司网站下载wordpress能开发app
  • Codeforces Beta Round 6 C - Alice, Bob and Chocolate
  • 工业大数据处理分析技术
  • 临武县网站建设专业网络推广方案xiala11
  • 河北省 建设执业注册中心网站上海网站企业
  • 搜索引擎优化网站版面设计图大全简单又漂亮