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,但它似乎无法解决这个问题 谢谢 我的两分钱解决方案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
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,因为您是第一个回答的。