给定数组a = [1,4,5,9,2]。我需要找到/打印两个值的组合,其中sum = 6.
我的代码如下:(它是O(n ^ 2)并且效率不高)。任何更好的解决方案 -
for(int out=0;out<a.length-1;out++)
{
for(int in=out+1;in<N;in++)
{
if(a[out]+a[in]==6)
{
System.out.println("The 2 numbers are: "+ a[out] +", "+ a[in]);
}
}
}
答案 0 :(得分:10)
HashSet
。val
,检查6-val
中是否HashSet
。我没有显示代码,因为这看起来像是家庭作业(如果是,请将其标记为此类)。
此外,对于短阵列,您的O(n^2)
解决方案几乎肯定会比这更快。
答案 1 :(得分:0)
for(int out=0;out<a.length-1;out++)
{
int value = a[out];
int required = 6 - value;
//now check if the required number is in the array
}
答案 2 :(得分:0)
首先,srock给出的解决方案应该如下所示
int length = a.length;
for(int out = 0; out < length ; out++) {
for(int inn = 0; inn < length; inn ++) {
if ((inn != out) && ((a[inn] + a[out]) == 6))
sysout("The valid combination is "+a[inn]+" "+a[out])
}
}
当然,这需要迭代长度*长度时间。正如aix所提到的,如果我们使用Hashset with contains将只迭代length的次数并且contains方法将直接使用hashcode转到bucket位置并将获取要比较的数据。所以这个HashSet :: contains方法最适合大型无数据。