首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化代码以在不到5秒内运行

优化代码以在不到5秒内运行
EN

Stack Overflow用户
提问于 2017-05-18 13:58:47
回答 2查看 179关注 0票数 0

在HackerEarth上的一些测试用例中,下面的代码需要超过5秒(5.001)。如何对这些代码进行更优化,使其在不到5秒内运行?

代码语言:javascript
复制
tc = int(input())
ip = []
for x in range(0, tc):
    temp = []
    temp.append(int(input()))
    temp.append([int(n) for n in input().split()])
    temp.append(int(input()))
    ip.append(temp)

for it in ip:
    while not it[2] <= 0:
        for x in range(0, it[0]):
            if it[1][x] == '0':
                continue
            it[2] -= int(it[1][x])
            if it[2] <= 0:
                it.append(x+1)
                break
    print(it[3])

仅供参考:

问题陈述

就距离而言,Aniruddha被赋予一个里程碑M。他住在一个不同的星系里,在一个year.At中有N天,他可以走在X,distance.Assuming的最高峰,他走得最好,你需要输出他到达里程碑的最小天数。

输入

第一个输入行包含测试用例的T数。每个测试用例由三行组成,第一行由单个整数N组成,即一年中的天数。

下一行包含N个非负空格分隔的数字,即Aniruddha将在当天行走的距离。保证这些数字中至少有一个大于零。

第三条线由Aniruddha必须达到的里程碑值组成。

输出

对于每个测试用例,您需要将答案输出到以下查询。

约束条件

代码语言:javascript
复制
1<=T<= 10

1<=N<=10^5

0<=X<=10^8

0<=M<=10^16
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-18 17:17:58

感谢J. Hollom,我做了一些修改,并将代码移植到Python3.x中。请注意,我的代码是为黑客地球(由J.Hollom提供的链接)设计的,因此它需要输入!

代码语言:javascript
复制
test_cases = int(input())
inputs = []
for x in range(test_cases):
    temp = []
    temp.append(int(input()))
    temp.append([int(n) for n in input().split()])
    temp.append(int(input()))
    temp.append(sum(temp[1]))
    inputs.append(temp)


for item in inputs:
    item[2] = item[2] % item[3]
    if item[2] == 0:
        item[2] += item[3]
    day = 0
    while item[2] > 0:
        item[2] -= item[1][day]
        day += 1 # Since day begins at Day 1 this will give right answer!
    print(day)

好的,现在所有的输入都在1秒内运行!

票数 0
EN

Stack Overflow用户

发布于 2017-05-18 16:15:02

假设这个问题来自这里,目标是在一年中的哪一天找到达到里程碑的日期。因此,我们真正感兴趣的只是最后一年才能达到这个里程碑。

因此,只需使用%操作符找出去年的距离,就可以大大提高代码的速度:

代码语言:javascript
复制
remainder = target % dist_per_year

然后,可以使用与最初使用的方法相同的方法对剩余部分进行迭代。示例(用python 2.7编写):

代码语言:javascript
复制
import random as rand
import time


def testcase(dist, milestone):
    dist_per_year = sum(dict)
    remainder = milestone % dist_per_year

    if remainder == 0:
        return len(dist)

    day = 0
    while remainder > 0:
        day = day + 1
        remainder = remainder - dist[day - 1]

    return day


milestone = rand.randint(0, 10e16)
days = rand.randint(1, 10e5)
dist = [rand.randint(0, 10e8) for i in xrange(days)]

t0 = time.time()
day = testcase(dist, milestone)
print 'Day:', day
print 'Time:', time.time() - t0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44049836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档