[codility] Lesson 1 Time Complexity
TapeEquilibrium
好吧,我一开始都是拿的41分,因为没有完全理解题意,边界条件很重要。
确定边界条件以后就一遍过了。另外自己应该好好准备一些边界测试用例。
1 def solution(A): 2 left, right, total = A[0], 0, sum(A) 3 res = abs(total - left * 2) 4 for i in range(1, len(A) - 1): # N > P > 0 5 left += A[i] 6 right = total - left 7 if abs(left - right) < res: 8 res = abs(left - right) 9 if res == 0: 10 break 11 return res
PermMissingElem
1 def solution(A): 2 n = len(A) 3 expect = (1 + n + 1) * (n + 1) / 2 4 total = sum(A) 5 return expect - total
FrogJmp
这一题我也拿了44分先,因为O(n)的遍历做加法,但是基础知识是数学,可以用除法解决的问题。
想起我之前Google电面有过一道题,power的实现,可以循环调用。
所以数学也很重要。边界继续重要,有没有余数决定结果是否需要加一
1 def solution(X, Y, D): 2 if X >= Y: 3 return 0 4 if (Y - X) % D == 0: # equal 5 return (Y - X) / D 6 return (Y - X) / D + 1