【问题标题】:Time Limit exceeded on LeetCodeLeetCode 超过时间限制
【发布时间】:2022-11-18 17:36:53
【问题描述】:

我正在尝试解决 Leetcode 的 Two Sum 问题 (https://leetcode.com/problems/two-sum/),我的代码在小列表上运行良好,

但是网站在尝试此列表和目标 (https://leetcode.com/submissions/detail/845707290/testcase/) (19999) 时输出我“超出时间限制”,尽管我的编码环境输出 [9998、9999](虽然过了一段时间)

x = 0
y = 1
while x < len(nums):
    if x == y:
        y += 1
    if (nums[x] + nums[y]) == target:
        L = [x, y]
        print(L)
        break
    if y == len(nums) - 1:
        x += 1
        y = 0
    if (nums[x] + nums[y]) == target:
        L = [x, y]
        print(L)
        break
    #if x == len(nums) - 1:
    #    y += 1
    #    x = 0
    elif (nums[x] + nums[y]) == target:
        L = [x, y]
        print(L)
        break
    y += 1

(我在 Leetcode 中的代码包含返回而不是打印,因为它是函数的一部分) 谢谢。

这是 LeetCode 上的代码

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        x = 0
        y = 1
        while x < len(nums):
            if x == y:
                y += 1
            if (nums[x] + nums[y]) == target:
                L = [x, y]
                return L
                break
            if y == len(nums) - 1:
                x += 1
                y = 0
            if (nums[x] + nums[y]) == target:
                L = [x, y]
                return L
                break    
            #if x == len(nums) - 1:
            #    y += 1
            #    x = 0
            if (nums[x] + nums[y]) == target:
                L = [x, y]
                return L
                break
            y += 1

【问题讨论】:

  • 你的问题到底是什么?你似乎已经知道问题出在哪里了。
  • 在线 IDE 根本不会为您提供资源来完成更冗长的任务(因此超过了时间限制)
  • 不能在你的函数中使用range直接定义list吗?
  • 另外,我相信当你回来时没有必要休息。
  • 当 Leetcode 告诉您您的代码运行时间太长时,这通常意味着尽管您的代码可能(最终)输出正确的结果,但您的算法存在缺陷

标签: python


【解决方案1】:

我认为代码还不是完全线性扩展,也许进一步搜索。 (绝对使用 datetime 来跟踪时间):

from datetime import datetime
start = datetime.now()
nums = list(range(1,1_000+1))
target = 1_999
x = 0
y = 1
while x < len(nums):
    if x == y:
        y += 1
    if (nums[x] + nums[y]) == target:
        L = [x, y]
        print(L)
        break
    if y == len(nums) - 1:
        x += 1
        y = 0
    if (nums[x] + nums[y]) == target:
        L = [x, y]
        print(L)
        break
    #if x == len(nums) - 1:
    #    y += 1
    #    x = 0
    if (nums[x] + nums[y]) == target:
        L = [x, y]
        print(L)
        break
    y += 1
print("Finished in:", datetime.now() - start)

from datetime import datetime
start = datetime.now()
nums = list(range(1,10_000+1))
target = 19_999
x = 0
y = 1
while x < len(nums):
    if x == y:
        y += 1
    if (nums[x] + nums[y]) == target:
        L = [x, y]
        print(L)
        break
    if y == len(nums) - 1:
        x += 1
        y = 0
    if (nums[x] + nums[y]) == target:
        L = [x, y]
        print(L)
        break
    #if x == len(nums) - 1:
    #    y += 1
    #    x = 0
    if (nums[x] + nums[y]) == target:
        L = [x, y]
        print(L)
        break
    y += 1
print("Finished in:", datetime.now() - start)

这种方法更快:

from datetime import datetime
start = datetime.now()
target = 19_999
for x in range(1,10_000 + 1):
    for y in range(1,10_000 + 1):
        if x + y == target:
            break
    if x + y == target:
        print([x,y])
        break
print("Finished in:", datetime.now() - start)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2022-07-16
    • 1970-01-01
    • 2022-08-24
    相关资源
    最近更新 更多