最近写到的OA题目, 可是有testcase超时, 不知道有没有人有啥想法
题目:
有一个array, 你要找出所有不同subarray的数量, 每个sub arrays最多包含k个奇数数字.
范例 1:
array = [1, 2, 3, 4] & k = 1
总个会有[1], [2], [3], [4], [1, 2], [2, 3], [3, 4], [2, 3, 4]这八种, 要return 8
范例 2:
array = [1, 1, 2, 3] & k = 2
会有[1], [1, 1], [1, 1, 2], [1, 2], [2], [2, 3], [3], [1, 2, 3] 要return 8种
p.s
array不是sorted的
array的size在1~1000之间
我的解法是暴力解O(n^2),可是有些testcase会超时, 不知道有没有O(n)还是O(nlogn)解
法的
更新1:
范例2, 会有两组[1], [1], 但要求是distinct subarray, 所以 [1], [1]算一组
更新2:
subarray是原本array连续的部分.
更新3:
范例2有错, 已经修改了
更新4:
用了suffix arrays sorted的方法,array大小是1000的时候耗时0.02s, brute force是5.6s
感谢大家帮忙
更新5:
https://repl.it/@Lancer_Liou/BrilliantCurvyBrain
之前的code [1, 1, 1, 1]会多扣掉一些, 真正的要减掉的应该是 number of deduct arrays = min(longest common prefix, the length of the longest string which contain at most k odd num),这样就可以了