给定列表1,4,5,9,2编写程序以找到两个值的可能组合,其中sum = 6

时间:2011-10-28 06:36:59

标签: java arrays

给定数组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]);
    }
    }
}

3 个答案:

答案 0 :(得分:10)

  1. 将所有数字放入HashSet
  2. 对数组进行迭代,对于每个项val,检查6-val中是否HashSet
  3. 我没有显示代码,因为这看起来像是家庭作业(如果是,请将其标记为此类)。

    此外,对于短阵列,您的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方法最适合大型无数据。