Algorithm 求四位数,使它们加起来等于一个特定的和

Algorithm 求四位数,使它们加起来等于一个特定的和,algorithm,Algorithm,给出了一个正整数数组,求出i

给出了一个正整数数组,求出i 这个问题通常被称为四和或四和

问题在于以下代码在CodeChef上的ayush_ar0204解决方案的数组中循环(s是数组):

排序(s,s+n);
用于(长k=2;k=t)
打破
长j=k-1;

对于(long long i=0;i此解决方案将运行时间从原始的O(n4)减少到O(n2)。它看起来有些奇怪,因为它重用了以前计算的信息


在任何时候,我们都希望
counts[m]
(使用
counts
作为字典)包含
(i,j)
对的数量,使用
i
这样
s[i]+s[j]==m
。在
k==1
开始循环之前,这是非常正确的,因为没有对
(i,j)
因此每个计数都是0。每次
k
增加时,我们必须添加到计数中的唯一对是
j==k-1
的对。如果
j
,则在循环的最后一次迭代中已经对该对进行了计数。使用
counts
数组意味着我们没有查看特定的四个
(i,j,k,l)
不再;相反,对于
k
的每个值,我们迭代所有可能的
l
值,并将有效
的存储计数(i,j)加到总数中
具有正确总和的元组。

您假设该解决方案中的变量
j
k
与问题描述中的
j
k
具有相同的含义。如果在该假设下代码没有意义,则该假设可能是错误的。欢迎来到StackOverflow.,和…ap最值得注意的是,您询问的是一个远程、易失性站点上的代码。这是不可接受的——您的问题必须是自包含的。