UVA11536 最短子序列 Smallest Sub-Array

知识点:尺取法

首先一眼看出这个题可以用尺取法,然后这个题我一开始没有看英文原题,看了输入的时候懵了,序列在哪里,然后看看题才知道,序列让你自己造,造完之后就可以开始尺取了,

我自己总结的尺取法的步骤有四个,移动右下标,判断退出,更新答案,移动左下标,一个一个来说

移动右下标,这里需要注意只有序列里面小于等于k的数字才是我们需要统计数目的数字,边移动下标边统计出现了几个不同的有效数字了,

判断退出,右下标移动完了,出来了,如果出现的数字数小于k,这就隐含了右下标已经走到了n+1,那么说明就已经没有答案可以统计了,退出

更新答案,程序走到这里没有退出,那么说明统计的出现数字数达标了,可以直接更新答案了,

移动左下标,这里我们移动左下标的思路就是移动到当前元素后面第一个有效元素,我们要先写一个if,因为除了第一次移动的时候当前元素可能不是有效元素,后面每次移动,第一个都是有效元素,然后是一个while循环,目的就是为了移动过那些无效元素,直到有效元素,停,移动完之后,需要更新答案,因为序列里面有效元素是不限次数出现的,很明显,移动完之后可能会有更短的满足题意的序列,

这样,这个题就完成了,不错的尺取法练习题,

看了别人的题解,思考了一下,二分答案也可以做,判定函数就是给一个区间的长度,线性扫描一遍,看看有没有至少一个区间是

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值