微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

4sum 超出时间限制leetcode

如何解决4sum 超出时间限制leetcode

这是我遇到的问题,问题是从长度为 N 的数组 nums 中找出长度为 4 的可能组合,其总和必须等于给定的目标。

[-497,-480,-477,-470,-452,-448,-440,-412,-390,-381,-372,-369,-366,-355,-346,-340,-337,-322,-321,-311,-296,-258,-249,-248,-232,-215,-199,-174,-154,-128,-122,-117,-115,-113,-110,-89,-86,-84,-78,-71,-69,-53,-49,-35,-25,-21,-7,3,7,21,25,30,47,52,81,84,87,91,96,157,161,167,178,184,210,217,228,236,274,277,283,286,290,301,302,341,352,354,361,367,384,390,412,421,458,468,483,484,486,487,490,491] 
target: 8377

我写了上面的代码,但它显示它超过了时间限制,有人可以帮我吗?

<select>
  <option>Option 1</option>
  <option>Option 2</option>
  <option>Option 3</option>
</select

这是最后执行的测试用例。

解决方法

除了选择一个非常低效的算法之外,您的实现还存在一些效率问题:

  • 无需将 combinations 返回的迭代器转换为列表(您甚至在 for 中再次重铸它!):只需使用它,您将节省两个空间和时间
  • 无需对 comb 进行排序 - 它的元素已经与输入列表的顺序相同
  • 无需测试结果列表中是否已存在有效组合:您只会看到每个组合一次(除非您的输入中有重复值)

试试这个,即使不改变算法,它已经快得多了:

def new_fourSum(self,nums: List[int],target: int) -> List[List[int]]:
    from itertools import combinations
    lst=[]
    for i in itertools.combinations(nums,4):
        if sum(i)==target:
          lst.append(i)
    return lst

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?