slide window总结

自己的模板:

//求满足条件的最小
int l = 0;
for (int r = 0; r < n; ++r) {
	//窗口放大  和第二步顺序不固定。。
	加入nums[r]
	//缩小窗口
	while (当前窗口不满足了->适用于最长的子数组 || 满足&&左边界可以右移->适用于找最小的子数组){
		删掉nums[l++]
	}
	//更新ans:
	(如果满足条件) 则ans = max(ans, r - l + 1)求最长子数组
}

//固定k长度的滑动窗口
//适用于:abs(i - j) <= x的区间范围->slide window ,维护一个长度为x + 1的固定区间
l = 0;
for (int r = 0; r < n; ++r) {
	if (r >= k)  去掉l++处的元素
	加入r处的元素
	如果长度为k且满足题意 更新ans或者return true/false
}

还款机制

方法一:
for (auto& ch : p) flag[ch - 'a']++;
if (--flag[s[r] - 'a'] >= 0) cnt++; //右边界--后:>=0表示增加一次有效还款
if (++flag[s[l] - 'a'] > 0) cnt--; //左边界++后:>0表示失去一次有效还款

//方法二:
//for (auto& s : words) hash[s]++;
//if (++hash2[sr] <= hash[sr]) cnt++;//增加一次有效还款
//if (--hash2[sl] < hash[sl]) cnt--; //表示失去一次有效还款
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值