Python 需要加快我的算法吗
我需要让我的程序更快,但我就是不知道怎么做。问题就在这里。我有一系列的数字排序如下:Python 需要加快我的算法吗,python,algorithm,performance,math,Python,Algorithm,Performance,Math,我需要让我的程序更快,但我就是不知道怎么做。问题就在这里。我有一系列的数字排序如下: 7 4 8 2 5 9 1 3 6 10 7 \ 4 8 \ \ 2 5 9 \ \ \ 1 3 6 10 我必须根据输入输出一个数字。输入是两个整数,把它们看作x和y坐标。x是我离开左边的多少,y是我离开底部的多少。假设x和y是1和1,那么我必须输出5 7 4 8 2-5 9 | 1 3 6 10 现在,我的代码可以正常工作并得到正确的数字,但速度太慢了 def a
7
4 8
2 5 9
1 3 6 10
7
\
4 8
\ \
2 5 9
\ \ \
1 3 6 10
我必须根据输入输出一个数字。输入是两个整数,把它们看作x和y坐标。x是我离开左边的多少,y是我离开底部的多少。假设x和y是1和1,那么我必须输出5
7
4 8
2-5 9
|
1 3 6 10
现在,我的代码可以正常工作并得到正确的数字,但速度太慢了
def answer(x, y):
last_num = 1
arr_hold = [[1]]
for i in range(2, x+(y+2)):
reg_hold = []
for j in range(last_num + 1, i + last_num + 1):
if j == (i + last_num + 1) - 1:
last_num = j
if i == (x+(y+2)) - 1:
reg_hold.append(j)
print reg_hold
return reg_hold[x]
我能做些什么来加快速度吗?
最大x或y值可以是100000,最小值为0,将输入存储为列表列表。将刚读到的列表倒过来。那么索引就很简单了
m = [[7], [4, 8], [2, 5, 9], [1, 3, 6, 10]]
m = m[::-1] # reverse m = [[1, 3, 6, 10], [2, 5, 9], [4, 8], [7]]
x = 1
y = 1
print m[x-1][y-1]
将输入存储为列表列表。将刚读到的列表倒过来。那么索引就很简单了
m = [[7], [4, 8], [2, 5, 9], [1, 3, 6, 10]]
m = m[::-1] # reverse m = [[1, 3, 6, 10], [2, 5, 9], [4, 8], [7]]
x = 1
y = 1
print m[x-1][y-1]
这个问题有一个封闭的解决方案。下面一行的数字是三角形数字。您可以使用
n*(n+1)//2
计算它们。您可以通过计算右n
并从其生成的三角形数中进行偏移来获得结果:
def answer(x, y):
n = x + y + 1
return n*(n+1)//2 - y
这个问题有一个封闭的解决方案。下面一行的数字是三角形数字。您可以使用
n*(n+1)//2
计算它们。您可以通过计算右n
并从其生成的三角形数中进行偏移来获得结果:
def answer(x, y):
n = x + y + 1
return n*(n+1)//2 - y
@乌里埃利你什么意思?我告诉过你,x是向右移动的次数,y是向上移动的次数。分析模式。很明显,一个数字和它的坐标是有关系的。如果你能弄清楚它是什么,就没有必要做循环。如果你的代码没有错误,一个更好的地方可以问。@Urielli你是什么意思?我告诉过你,x是向右移动的次数,y是向上移动的次数。分析模式。很明显,一个数字和它的坐标是有关系的。如果你能弄清楚它是什么,就不需要做循环。如果你的代码没有错误,那么一个更好的地方是。存储像:[[1]、[2,3]、[4,5,6]]这样的列表不是更好吗?存储像:[[1]、[2,3]、[4,5,6]]这样的列表不是更好吗?啊,我觉得这应该适用于任何数组列表:-)啊,我觉得这应该适用于任何数组列表:-)