求一个给定数组中,和为某一定值的子数组

spllot 2011-03-21 02:18:33
例如:给定一个数组(全是整型的)例如:array=[12,23,11,33,15,24] 和一个和数sum例如:46

求出一个子数组使得这个子数组的所有元素的和为sum(46).(例childArray=[12,23,11])

除了通过遍历所有的子数组的方式,还有没有其他高效一点的方式?




...全文
665 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
keeya0416 2011-03-21
  • 打赏
  • 举报
回复
这问题就是暴力搜索
做些剪枝
前几天也有人问过这问题

public static void main(String[] args) {
int[] nums = {12,23,11,33,15,24};
method(nums, 46);
}

public static void method(int[] nums, int sum){
List<Integer> list = new LinkedList<Integer>();
method(nums, sum, list, -1);
}

private static void method(int[] nums, int sum, List<Integer> list, int index){
if(sum == 0){
for(int i : list){
System.out.printf("%d ", i);
}
System.out.println();
}else if(sum > 0){
for (int i = index + 1; i < nums.length; i++) {
list.add(nums[i]);
method(nums, sum - nums[i], list, i);
list.remove(list.size() - 1);
}
}
}
yaoweijq 2011-03-21
  • 打赏
  • 举报
回复
排序再筛选,
可以进行很多剪枝操作
zqfddqr 2011-03-21
  • 打赏
  • 举报
回复
顶多筛选一下吧 比sum大的直接筛掉
钱成军 2011-03-21
  • 打赏
  • 举报
回复
理论上来说,没有!

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧