如何确定所有奇数正整数的总和,直到某个数字arr[i]
。如果查询是arr=[4,5]
,则答案是1+3=4
的{{1}}和arr[0]=4
的{{1}}。
答案 0 :(得分:1)
不清楚为什么您需要定义列表arr=[4,5]
。
这个简单的lambda可以在任意正数下完成您的任务:
sum_odd_numbers = lambda num: sum(xrange(1, num + 1, 2))
# Examples
>>> lst = [4, 5]
>>> print sum_odd_numbers(lst[0])
# 4
>>> print sum_odd_numbers(lst[1])
# 9
答案 1 :(得分:1)
我们可以制作一个使用range(..)
的简单实现,然后将其汇总,例如:
def f(n):
return sum(range(1, n+1, 2))
,但是如果我们考虑将数字加在一起作为常数运算,则此运算将在 O(n)中运行。
这是arithmetic series [wiki]。如果 k 是 k =⌊(n-1)/2⌋,则等于:
k
---
\ (k+1) (2*k+2) 2
/ 2*i + 1 = ------------- = (k+1)
--- 2
i=0
所以我们可以简单地将其计算为:
def f(n):
k1 = (n+1) // 2
return k1 * k1
例如:
>>> f(4) # 1 + 3
4
>>> f(5) # 1 + 3 + 5
9
>>> f(10) # 1 + 3 + 5 + 7 + 9
25
>>> f(123456789)
3810394749276025