1254

就是说相比原来朴素的bfs,还要求每个岛都被水包围
如果是中间的位置,那必然是被水包围的
所以只有跟边界相关的岛,才不会被水包围
所以在bfs时,还要加一个flag表示这个岛是否和边界沾边,只要沾边就不能res++

AI优化




4093

考虑构造出一个新数组arr,即原数组中每个元素所能构造出的最大数字
然后排序新数组arr,取前k个数加和,同时标记其为使用,但排序后难以知道topk的数字对应原数字是哪个
再考虑新数组arr为构造后新最大数字与原数字的插值,对这个进行排序
然后之前对原数组求和,之后在排序后的arr数组中,取出topk个值大于0的插值作用到求和结果中
4094


因为是弱化版,所以先枚举
枚举起点,然后要求接下来的数字符合要求
之前想的要求,是相同数字之间必须连续,所以对于样例3的实现,少了0-5,

即不连续都可以,只要最终数量符合要求即可,而且必须符合出现的顺序
考虑结合vector与set实现
貌似都不用set,只要vector,
还是需要set的,因为不知道当前数字是否出现过,以及在Vector当中的位置
那就不是set了,而是哈希表了
如果没出现过,那就是Push_back到vector后面,哈希表记录该数字在数组中的位置,这个位置也代表了不同数字出现的次序,要求其vector值不得超过其次序
如果出现过,那么通过哈希表找到下标,并使其值++,同时检查是否超过次序
但这样的话,无法检查中间可能的子数组
或许还是能的
就是当到达结尾或非法的时候,自vector头部开始检查,查符合条件的数量,就是以此i为头部的所有子数字的数量

但还是有问题,就是即使vector中第二个数满足数量条件,但因为是从数量上直接判断的,所以第二个2判断出来时,还会包含上不满足条件的8
AI题解


意思就是把判断提前,每次子数组扩展的时候就判断,如果满足条件就res++,如果非法了,那么后面也一定非法,当前的也组成不了,前面的已经在每轮里都统计过了所以也不会漏,所以依然是直接Break掉
4095


大数据范围
AI题解



就是固定左端点时,是枚举k=1,2,3等数组长度,然后去验证是否真的能构成;
关键在于枚举K的时候,如何知道此时子数组里该有哪k个元素呢?以及这k个元素是否能满足条件?
此外,这里存在一个关键误区,也是之前自己一直想错的点,就是不同K在组成子数组时,答案不具有连续性,即k=2如果不满足条件,那么不能提前break,在K=3或K=4的时候,可能依然可以组成合法子数组
只是在判断每个K是否能组成合法子数组时,单个k内可以提前break掉,但不能Break掉不同k之间的校验
如何知道此时子数组里该有哪k个元素呢?


