从O(n ^ 2)到O(n)或更短的时间复杂度优化问题的解决方案

时间:2019-04-30 18:22:58

标签: python-3.x

您将得到两个分数:0/1和1/2。在每个步骤中,您将获得两个相邻的分数,并且仅当分母等于或小于在该步骤中获得的数字时才需要将它们相加,并将其写在这两个相邻的分数之间。

示例:

第1步:0 / 1,1 / 2

第2步:0 / 1,1 / 2

第3步:0 / 1,1 / 3,1 / 2,依此类推

add运算符的定义如下:

如果将(a / b)和(c / d)相加,则总和为(a + c)/(b + d),这意味着它们的分子和分母都相加了。

您必须在第n步中找到第k个分数。

注意:您将获得n和k的值

输入格式

第一行:两个整数n和k(1

输出格式

以(int)/(int)格式打印答案,例如3/5。

我所做的只是遵循问题陈述并相应地做。但这增加了问题的时间复杂度,并且可以正常工作到n = 600

以下是我处理过的代码示例

from fractions import Fraction


n,k=map(int,input().strip().split())
arr=[(0,1),(1,2)]
length=0

for i in range(1,n+1):
    increment=0

    for j in range(2+length-1):

        if increment==0:

            nume=arr[j][0]+arr[j+1][0]
            denom=arr[j][1]+arr[j+1][1]
        else:
            nume=arr[j+increment][0]+arr[j+increment+1][0]
            denom=arr[j+increment][1]+arr[j+1+increment][1]

        if denom<=i:
            arr.insert(increment+j+1,(nume,denom))
            increment+=1
            length+=1

if k==1:
    ans="0/1"
    print(ans)
else:
    print (Fraction(arr[k-1][0],arr[k-1][1]))

0 个答案:

没有答案