Java如何统计数组中两数之和等于给定值的组合总数
问题解答
疑问解答
- 是否需要新建额外数组来存储任意两个元素的和?
不需要。你只需要当场计算两个元素的和并判断是否符合要求即可,额外存储和会占用不必要的内存空间,数组规模较大时还会拉低执行效率。 - 应该采用什么方法计算数组中任意两个元素的和?
对于入门学习者,最容易理解的是双重for循环法:外层循环遍历第一个元素的位置,内层循环从外层元素的下一个位置开始遍历第二个元素,这样可以保证每对组合只被计算一次,不会出现(a,b)和(b,a)重复统计的问题。 - 如何统计符合条件的组合数量?
你可以定义一个初始值为0的计数器变量,每计算出一组两个元素的和等于givenNumber时,就把计数器的值加1,循环结束后计数器的值就是符合要求的总组合数。
现有代码问题说明
你目前编写的代码存在以下问题:
- 循环中同时使用
index++和++index,会导致索引每次循环跳2位,无法遍历所有元素 - 只计算了相邻元素的和,没有覆盖所有两两组合的情况
- 没有设置计数器统计符合条件的组合,sum变量每次循环都会被覆盖,没有实际作用
修正后可运行代码
public class NumberOfCombinations { public static void main(String[] args) { // 定义数组和目标数值 int[] valuesTable = {1, 2, 3, 4, 5}; int givenNumber = 3; // 定义计数器,初始值为0 int count = 0; int n = valuesTable.length; // 外层循环:取第一个元素,索引范围是0到n-2 for (int i = 0; i < n - 1; i++) { // 内层循环:取第二个元素,从i的下一位开始,避免重复统计 for (int j = i + 1; j < n; j++) { // 当场计算两个元素的和,判断是否符合要求 if (valuesTable[i] + valuesTable[j] == givenNumber) { count++; } } } // 输出结果,示例中符合条件的组合是(1,2),结果为1 System.out.println("符合条件的组合总数量为:" + count); } }
内容的提问来源于stack exchange,提问作者sylvtronix
相关产品推荐
相关产品推荐

