小编kin*_*ong的帖子

给定最大10 000个自然和不同数字的向量,找到4个数字(a,b,c,d),使a + b + c = d

我通过遵循一个简单但非最优的算法解决了这个问题.我按降序对矢量进行了排序,之后从max到min减去了数字,看是否得到a + b + c = d.请注意,我没有在任何地方使用过这样一个事实:元素是自然的,不同的,最多只有10000个.我想这些细节是关键.这里有没有人提示解决这个问题的最佳方法?

先感谢您!

后来编辑:我的想法是这样的:

'<<quicksort in descending order>>'

for i:=0 to count { // after sorting, loop through the array
    int d := v[i];
    for j:=i+1 to count {
        int dif1 := d - v[j];
        int a := v[j];

       for k:=j+1 to count {
           if (v[k] > dif1)
              continue;
           int dif2 := dif1 - v[k];
         b := v[k];

    for l:=k+1 to count {
 if (dif2 = v[l]) {
    c := dif2; 
     return {a, b, c, …
Run Code Online (Sandbox Code Playgroud)

algorithm math

4
推荐指数
1
解决办法
350
查看次数

标签 统计

algorithm ×1

math ×1