找出数组的4个整数加起来等于整数n的最有效方法是什么?

时间:2018-09-25 07:21:53

标签: arrays

我有一个由m个整数组成的数组,我想检查数组中是否有4个整数(允许重复),它们加和成给定的整数n。

例如,如果存在数组[8,4,2,1],并且n = 8,则可能的组合为-{2,2,2,2},{4,2,1,1}

目前,我正在使用4个for循环进行计数,如下所示:

int ans = 0;

for(int a = 0; a<arr.size(); a++) {
    for(int b = 0; b<arr.size(); b++) {
        for(int c = 0; c<arr.size(); c++) {
            for(int d = 0; d<arr.size(); d++) {
                if(arr[a] + arr[b] + arr[c] + arr[d] == n) ans++;
            }
        }
    }
}

printf("%d", ans);

1 个答案:

答案 0 :(得分:1)

  1. 对输入数组X进行排序,以删除重复项。
  2. 懒散地产生变体,从最大的C[0]^4到最小的C[3]^4,丢弃其中部分乘积P {C [i]}超过目标X的组合集。
  3. 将第一个元素提高到C[0]^4的第4次幂后立即停止。
  4. ...
  5. 利润。

通常,编程语言将提供上述算法的部分或全部支持。例如,在python中,您可以延迟列出带有X构建块的数组的所有排列,因此仅对修剪逻辑进行编码:

itertools