摘要:
原题链接 如果把其中一个数组去掉,就是上道题去掉k位数字,获得最小数字的另一个描述.将上道题的top>a[i]改成top<a[i]即可. 但这道题有两个数组,两个数组总共需要去掉k位数,使得这k位数最大. 我的错解思路是将两个数组都排进一个数组里,但这样解不出来,并且排序很难排序.完全没有想过枚举( 阅读全文
摘要:
原题链接 单调队列+前缀和 之前一直不理解滑动窗口,通过这道题理解了点,i是窗口右边节点,i-k+1是窗口左边界点,而单调队列是用来求该窗口相关属性的一个工具,q[hh]不一定等于窗口的左边界. 比如,本道题q[hh]是用来求窗口下最小和的下标,与i-k+1的下标无关,我们求cnt是否+1只需要判断 阅读全文
摘要:
原题链接 前缀和+单调队列 这题维护的不是[i-k+1,i]的区间,而是[i-k,i-1]的区间,因为我们要求前缀和的最大值,这道题如果让单调队列维护递减的序列,而边界点不好确定(因为我们不知道区间多大),这样就不利于求前缀和,可以转化一下,让单调队列维护区间最小值,用当前的前缀和sum[i]减去区 阅读全文
摘要:
原题链接 单调队列+前缀和 本题需要用到上题的破环成链的思想,因为可以正反方向两个方向找切割点,因此我们需要正反两个方向的前缀和,当我们反向搜索时,没必要从size()-1开始,可以同样设下标为1,然后从2*len-1开始加前缀和. 这里有几个需要注意的点: 这里需要将字符串转化成数字,如果在首位插 阅读全文
摘要:
原题链接 根据题意,很明显我们需要两个单调队列分别维护最小值与最大值.这里我用了双指针指向窗口的起点与终点.要注意的是如果差<m或者符合条件我们需要更新窗口的右端,如果>k我们需要更新窗口的左端 答案最小可以取0,所以maxn不要设置为负数 注意,第一次一定可以进while循环的,因为第一次队列差值 阅读全文