2014-03-05 33 views
-2

检查3个整数的和是否等于java中数组中的任何一个元素。请帮我检查任意3个整数的和是否等于java中数组中的任何一个元素

int[] arr={5, 1, 23, 21, 17, 2, 3, 9, 12}; 
Arrays.sort(arr); 
for(int i=0;i<arr.length;i++) 
    System.out.println(+arr[i]); 
System.out.println(Arrays.toString(arr)); 
for(int i=0;i<arr.length;i++){ 
    int sum=arr[i]+arr[i+1]+arr[i+2]; 
    if(arr[i]==sum) 
+0

3个整数的和?你的代码会抛出'ArrayIndexOutOfBoundsException',因为你最终会试图访问'arr [arr.length]',嗯... – luiges90

+2

什么是整数?如果你的意思是数组中的3个连续元素,那么你应该编辑你的问题。但是你有什么问题呢? –

回答

1

你想检查任何三个整数的总和等于数组中的任何一个元素的总和?你需要嵌套循环

for (int i = 0; i < arr.length; i++){ 
    for (int j = i+1; j < arr.length; j++){ 
     for (int k = j+1; k < arr.length; k++){ 
      int sum = arr[i] + arr[j] + arr[k]; 
      for (int index = 0; index < arr.length; index++){ 
       if (sum == arr[index]) 
        return true; 
      } 
     } 
    } 
} 
return false; 

编辑:我想你可以做一些优化,如果你第一次排序的数组,但你仍然需要类似上面的东西,以四嵌套循环来检查所有总计低于最大数量的组合

1

你想要做那样的事吗?

int[] arr={5, 1, 23, 21, 17, 2, 3, 9, 12}; 
for(int i=0;i<arr.length;i++) { 
    for(int j=i+1;j<arr.length;j++) { 
     for(int k=j+1;k<arr.length;k++) { 
      for (int l = 0; l < arr.length; l++) { 
       if (arr[i]+arr[j]+arr[k]==arr[l]) { 
        System.out.println(arr[i]+"+"+arr[j]+"+"+arr[k]+"="+arr[l]); 
       } 
      } 
     } 
    } 
} 
+0

这种方法的复杂性是'O(n^4)'。可以改进吗? – sanbhat

+0

@sanbhat是的,你可以,至少到O(n^3 logn)。如果您先对数组进行排序,则可以使用二分搜索以log(n)查找数组内三个数字的总和。但是你也可以利用它进行排序并进一步优化。但基本上你必须尝试几乎所有的组合。优化只能基于数字的属性,并且可能会很复杂,除非你愿意做一些数学 – stakSmashr

相关问题