欢迎光临散文网 会员登陆 & 注册

复盘|第354场周赛

2023-07-16 22:39 作者:UCLmsc  | 我要投稿

特殊元素平方和

【枚举】i是n的因子,n/i也是n的银子,只需枚举根号n以内的i就可以得到大于更好n的另一个因子。

数组的最大美丽值

【排序 + 双指针】由于选的是子序列,且子序列的元素都相等,所以元素顺序对答案没有影响,可以先对数组排序。由于替换操作替换的是一个连续范围内的数,所以排序后,选出的子序列必然也是一段连续子数组。 那么问题变成了找最长的连续子数组,其最大值减最小值不超过2k,只要子数组满足这个要求,其中的元素都可以变成同一个数。这个问题可以用同向双指针解决。枚举numsright作为子数组的最后一个数,一旦nums[right nums[lef代>2k,就移动左端点。right-left+1是子数组的长度,取所有长度最大值,即为答案。

合法分割的最小下标

【数学 + 枚举】首先求出众数mode及其出现次数total。然后枚举i,一边枚举一边统计freq(mode),那么freq2(mode)=total-freq1(mode)。只要满足freq1(mode)·2>i+1且freq2(mode)·2>n-i-1,就返回i。如果没有这样的i,返回-1。(证明:分割出的两个数组的支配元素就是原数组的支配元素——设这两个数组的支配元素为y(题目要求支配元素相同),那么对于第一个数组有freq1(y)·2>i+1),对于第二个数组有freq2(y)·2>n-i-1由于这两个数组合并之后就是原数组,所以freq(y)·2=freq1(y)·2+freq2(y)=·2>(i+1)+(n-i-1)=n上式表明,y就是原数组的支配元素)

最长合法子字符串的长度

【哈希表+双指针】由于forbidden[i]的长度不超过10,考虑同向双指针。初始化子串左端点left=0,枚举子串右端点right。对于示例2,只要right≥1,那么合法子串是不能包含1e的,所以左端点lft必须向右移,不可能再回到0。因为左端点只会向右移动,不会向左移动,这样的单调性保证了算法的效率。当right右移到一个新的字母时,枚举以该字母为右端点的forbidden[i]的最短长度。如果发现子串word[i]到word right在forbidden中(用哈希表实现),那么更新let=i+1并结束枚举,从而避免合法子串包含forbidden中的字符串。枚举结束后,更新答案为合法子串长度right-left+1的最大值。


复盘|第354场周赛的评论 (共 条)

分享到微博请遵守国家法律