我正在寻找解决问题的有效方法.. 编写一个程序来查找总和等于给定数字的所有整数对。例如,如果输入整数数组为{2,6,3,9,11}且给定的和为9,则输出应为{6,3}
现在我所尝试的是以下内容,但我知道这不是一个可行而有效的解决方案..
从数组中取一个数字然后循环遍历数组和输出对,它们等于给定的总和。您对第一个数组中的所有数字执行此操作,
import java.util.Arrays;
/**
* Java Program to find pairs on integer array whose sum is equal to k
*/
public class ProblemInArray{
public static void main(String args[]) {
int[] numbers = { 2, 4, 3, 5, 7, 8, 9 };
int[] numbersWithDuplicates = { 2, 4, 3, 5, 6, -2, 4, 7, 8, 9 };
prettyPrint(numbers, 7);
prettyPrint(numbersWithDuplicates, 7);
}
/**
* Prints all pair of integer values from given array whose sum is is equal to given number.
* complexity of this solution is O(n^2)
*/
public static void printPairs(int[] array, int sum) {
for (int i = 0; i < array.length; i++) {
int first = array[i];
for (int j = i + 1; j < array.length; j++) {
int second = array[j];
if ((first + second) == sum) {
System.out.printf("(%d, %d) %n", first, second);
}
}
}
}
/**
* Utility method to print input and output for better explanation.
*/
public static void prettyPrint(int[] givenArray, int givenSum){
System.out.println("Given array : " + Arrays.toString(givenArray));
System.out.println("Given sum : " + givenSum);
System.out.println("Integer numbers, whose sum is equal to value : " + givenSum);
printPairs(givenArray, givenSum);
}
}
Output:
Given sum : 7
Integer numbers, whose sum is equal to value : 7
(2, 5)
(4, 3)
Given array : [2, 4, 3, 5, 6, -2, 4, 7, 8, 9]
Given sum : 7
Integer numbers, whose sum is equal to value : 7
(2, 5)
(4, 3)
(3, 4)
(-2, 9)
答案 0 :(得分:3)
您可以使用HashMap。如果所需的总和 - 当前项目达到一个现有值,您可以确定这是一个可能的匹配。否则添加当前项目。 这应该在O(n)中运行。
public static final void sums(final int sum, final int[] numbers){
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i : numbers){
if(map.containsKey(sum-i)){
System.out.println("( "+map.get(sum-i) +" "+ i+" )");
}else{
map.put(i,i);
}
}
}
答案 1 :(得分:0)
这是我的代码:
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class FindPairs {
public static void main(String args[]) {
Integer[] numbers = { 2, 4, 3, 5, 7, 8, 9 };
int sum = 7;
List<Integer> Numbers = Arrays.asList(numbers);
Collections.sort(Numbers);
for (int i : Numbers) {
if (Numbers.contains(sum - i) && i <= (sum / 2) && i != (sum - i)) {
System.out.print((sum - i) + " & ");
System.out.println(+i);
}
}
}
}
需要条件i <=(sum / 2)以防止对(2&amp; 5)和(5&amp; 2)的双重复。 需要条件i!=(sum-i)来防止配对中的相同数量。 (例如,如果你的金额是8,那么如果你不使用这个条件,你也会得到一对(4,4))。
答案:
5&amp; 2
4&amp; 3