[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

 

posted @ 2015-08-14 22:22  tanchao  阅读(141)  评论(0编辑  收藏  举报