Algorithm 求四位数,使它们加起来等于一个特定的和
给出了一个正整数数组,求出iAlgorithm 求四位数,使它们加起来等于一个特定的和,algorithm,Algorithm,给出了一个正整数数组,求出i
排序(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最值得注意的是,您询问的是一个远程、易失性站点上的代码。这是不可接受的——您的问题必须是自包含的。