Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查任意3个整数之和是否等于java中数组中的任意一个元素_Java_Arrays - Fatal编程技术网

检查任意3个整数之和是否等于java中数组中的任意一个元素

检查任意3个整数之和是否等于java中数组中的任意一个元素,java,arrays,Java,Arrays,检查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=ar

检查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)
int[]arr={5,1,23,21,17,2,3,9,12};
数组。排序(arr);

对于(int i=0;i您想检查任意三个整数的和是否等于数组中任意一个元素?您需要嵌套循环

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;
for(int i=0;i

编辑:如果你先对数组排序,我想你可以做一些优化,但是你仍然需要类似于上面的东西,用一个四重嵌套循环来检查总和小于最大数的所有组合

你想这样做吗

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]);
                }
            }
        }
    }
}
int[]arr={5,1,23,21,17,2,3,9,12};

对于(int i=0;是哪3个整数的总和?您的代码将抛出
ArrayIndexOutOfBoundsException
,因为您将尝试访问
arr[arr.length]
,嗯…什么整数?如果您指数组中的3个连续元素,那么您应该编辑您的问题。但您到底有什么问题?此方法的复杂性是
O(n^4)
。可以改进吗?@sanbhat是的,至少可以改进到O(n^3 logn)。如果先对数组排序,可以使用二进制搜索查找带有log(n)的数组中三个数字的总和。但你也可以利用排序和进一步优化的优势。但总的来说,你基本上必须尝试几乎所有的组合。优化只能基于数字的属性,并且可能很复杂,除非你愿意做一些数学运算