小编Rus*_* Ng的帖子

O(n)求解最大差值和python 3.x的解决方案?

我想知道,给一个整数列表,比如说l,如果我们被允许从该列表中选择3点的整数,也就是说left,middle,right,其中middle > left, rightleft, middle, right出现在列表中的顺序(即index(left)<index(middle)<index(right)),确实存在一个O(n)寻找解决方案最大的middle - left + middle - right?您可能会认为不符合这些条件的列表不会出现(例如[5,0,5],如Eric Duminil所指出的那样)

目前,我能够提出我认为(大致)一个O(n^2)解决方案(如果我错了,请纠正我).

从本质上讲,我目前的想法是:

maximum = 0
for idx in range(1, N - 1):
    left = min(l[0: idx])
    right = min(l[idx + 1:])
    middle = l[idx]

    if left < middle and right < middle:
        new_max = middle - left + middle - right
        maximum = max(new_max, maximum)
Run Code Online (Sandbox Code Playgroud)

帮助/提示将不胜感激.

谢谢!

python optimization performance time-complexity python-3.x

7
推荐指数
2
解决办法
344
查看次数

如何快速找到2个不同数组中所有元素对的总和

所以最近我遇到了这个编程问题,我似乎无法使复杂性降低(我当前的代码运行在O(n ^ 2)).

基本上,我有四个不同的列表(我使用python btw)的整数,正面和负面,比如列表A,B,C,D.现在,这些列表中的每一个都有1000个整数,这些整数的范围是-25000到25000包括在内.现在,假设从每个列表中我们选择一个整数,比如a,b,c,d.我想找到这些a,b,c,d的最快方法是a + b = - (c + d).

目前,我的方法依赖于遍历a,b和c,d的每个可能组合,然后尝试查找集合中的元素(a + b)是否存在于集合中 - (c + d).当然,这是不切实际的,因为它在O(n ^ 2)时间内运行,考虑到大的列表大小(1000),更是如此.

因此,我想知道是否有人能想到更有效的方式(最好是O(n log n)或更小),如果可能的话用python编码.

如果它相当令人困惑,请道歉.如果您有任何疑问请通知我,我会尽量提供更多说明.

编辑:

这个问题是一个更大问题的一部分.更大的问题表明,如果我们有4个数字序列,每个数字最多1000个整数,比如A,B,C,D,找到a,b,c,d使得a + b + c + d = 0.

我问了上面的问题,因为a + b + c + d = 0意味着a + b = - (c + d),我认为这将导致解决问题的最快方法.如果有人能想到更快的方式,请与我分享.

提前致谢!:)

python arrays algorithm big-o

5
推荐指数
1
解决办法
670
查看次数