解决方案:
package com.ncs.test.algorithm;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
import org.junit.Test;
public class practice {
@Test//给出一个数组,输出和为k的两个数。数组为无序的。
public void test() {
int[] arr = {1,3,2,1,4,5};//准备一个数组
int k = 5;//目标和
printK(arr, k);//处理过程
}
public void printK(int[] arr, int k) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();//创建一个HashMap去除重复结果
for (int i = 0; i < arr.length; i++) {//遍历所有元素
for (int j = i; j < arr.length; j++) {//遍历所有元素做加法,保证两个相同元素只相加一次
if (i == j) {//如果两个元素索引相同则为同一个元素,去除自身与自身相加
continue;
}
int sum = arr[i] + arr[j];//求和
if (sum == k) {//和目标和比较
map.put(arr[i], arr[j]);//相等就放入map去重
}
}
}
//遍历map得到和为目标和的两个数字
Set<Entry<Integer,Integer>> entrys = map.entrySet();
for (Iterator<Entry<Integer, Integer>> iterator = entrys.iterator(); iterator.hasNext();) {
Entry<Integer, Integer> entry = (Entry<Integer, Integer>) iterator.next();
System.out.println("num1="+entry.getKey()+" num2="+entry.getValue());
}
}
}
打印结果:
num1=1 num2=4
num1=3 num2=2