Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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
Java 总和存在于数组项中_Java_Arrays_Algorithm_Search - Fatal编程技术网

Java 总和存在于数组项中

Java 总和存在于数组项中,java,arrays,algorithm,search,Java,Arrays,Algorithm,Search,建议使用以下数组: {2,3,4,5,11,6}我想知道数组中是否有任何项包含数字x的和 例如: x=10,则输出为{2,3,5}和{4,6}。 x=13,则输出为{2,11}、{3,4,6}和{2,5,6} 解决这个问题的最佳算法是什么 我曾经考虑过使用数组的可能排列来解决这个问题,并检查每个排列的开始和是否等于X,但它似乎无法解决这个问题 谢谢 我的两分钱解决方案 import java.util.ArrayList; import java.util.Arrays; import java

建议使用以下数组:

{2,3,4,5,11,6}我想知道数组中是否有任何项包含数字x的和

例如: x=10,则输出为{2,3,5}和{4,6}。 x=13,则输出为{2,11}、{3,4,6}和{2,5,6}

解决这个问题的最佳算法是什么

我曾经考虑过使用数组的可能排列来解决这个问题,并检查每个排列的开始和是否等于X,但它似乎无法解决这个问题

谢谢

我的两分钱解决方案

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Test {

    public static void main(String[] args) {

        List<Integer> list = Arrays.asList(2, 3, 4, 5, 11, 6);
        Collections.sort(list);

        Integer sum = 0;
        Integer max = 13;

        for (int i=0; i<list.size(); i++) {
            sumNext(list, i, sum,max, new ArrayList<Integer>());
        }

    }

    private static void sumNext(List<Integer> list, int pos, Integer currentSum, Integer max,
            List<Integer> currentElement) {
        int nextSum = currentSum + list.get(pos);

        if (nextSum > max) {
            return;
        }

        currentElement.add(list.get(pos));
        if (nextSum == max) {
            for (Integer i : currentElement) {
                System.out.print(i);
                System.out.print(" ");
            }
            System.out.println();
        } else if (nextSum < max && list.get(pos) < max - currentSum) {
            // as array is sorted if current element is higher than the diff
            // between currentSum and max there is no need to try with next
            // element
            for (int i=pos+1; i<list.size(); i++) {
                sumNext(list, i, nextSum, max, currentElement);
            }
        }
        currentElement.remove(list.get(pos));
    }

}
import java.util.ArrayList;
导入java.util.array;
导入java.util.Collections;
导入java.util.List;
公开课考试{
公共静态void main(字符串[]args){
List=Arrays.asList(2,3,4,5,11,6);
集合。排序(列表);
整数和=0;
整数max=13;
对于(int i=0;i max){
返回;
}
currentElement.add(list.get(pos));
如果(nextSum==最大值){
for(整数i:currentElement){
系统输出打印(一);
系统输出打印(“”);
}
System.out.println();
}else if(nextSum
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Test {

    public static void main(String[] args) {

        List<Integer> list = Arrays.asList(2, 3, 4, 5, 11, 6);
        Collections.sort(list);

        Integer sum = 0;
        Integer max = 13;

        for (int i=0; i<list.size(); i++) {
            sumNext(list, i, sum,max, new ArrayList<Integer>());
        }

    }

    private static void sumNext(List<Integer> list, int pos, Integer currentSum, Integer max,
            List<Integer> currentElement) {
        int nextSum = currentSum + list.get(pos);

        if (nextSum > max) {
            return;
        }

        currentElement.add(list.get(pos));
        if (nextSum == max) {
            for (Integer i : currentElement) {
                System.out.print(i);
                System.out.print(" ");
            }
            System.out.println();
        } else if (nextSum < max && list.get(pos) < max - currentSum) {
            // as array is sorted if current element is higher than the diff
            // between currentSum and max there is no need to try with next
            // element
            for (int i=pos+1; i<list.size(); i++) {
                sumNext(list, i, nextSum, max, currentElement);
            }
        }
        currentElement.remove(list.get(pos));
    }

}
import java.util.ArrayList;
导入java.util.array;
导入java.util.Collections;
导入java.util.List;
公开课考试{
公共静态void main(字符串[]args){
List=Arrays.asList(2,3,4,5,11,6);
集合。排序(列表);
整数和=0;
整数max=13;
对于(int i=0;i max){
返回;
}
currentElement.add(list.get(pos));
如果(nextSum==最大值){
for(整数i:currentElement){
系统输出打印(一);
系统输出打印(“”);
}
System.out.println();
}else if(nextSum对于(inti=pos+1;i?更简单,事实上,因为你似乎只有正数。也可以看作是的一个特例。“它似乎无法解决它”你为什么这么认为?创建所有可能的排列,将这些排列相加,然后返回正确的排列可能没有效率,但它会起作用!也许我没有很好地解决它,我会再试一次。记住,一组n个成员有n个!可能的排列,增长非常快。即使你的数组中只有20个元素,你也可以ave 20!排列,类似于2.4*10^18。对于相对较小的数字,您永远无法完成所有排列的计算。最好使用tobias_k建议的算法。tobias_k,欢迎您添加您的答案以接收V,因为您是第一个回答的。事实上,更简单,因为您似乎只有正数。可以吗也被视为“它似乎无法解决问题”的特例你为什么这么认为?创建所有可能的排列,将这些排列相加,然后返回正确的排列可能没有效率,但它会起作用!也许我没有很好地解决它,我会再试一次。记住,一组n个成员有n个!可能的排列,增长非常快。即使你的数组中只有20个元素,你也可以ave 20!排列,类似于2.4*10^18。对于相对较小的数字,您永远无法完成所有排列的计算。最好使用tobias_k建议的算法。tobias_k,欢迎您添加您的答案以接收V,因为您是第一个回答的。