问题1:
给定一个数值,如何搜索整数数组中加和为该数值的成对元素?
容易理解实例:
指定数为88,求一个长度为100整型数组中两数之和为88所有情况并列出来,数组中整数取值范围[1,100].
思路1:循环从数组中找到两个索引不同数相加后与88比较;时间复杂度O(nCr(100,2));
思路2:通过数学知识分析,88由两正整数相加情况本身只有44种情况:
1+…
2+…
3+…
…
43+45
44+44;
45+43
…
87+1.
那么直接在给定数组中搜索是否有相应的组合就行。
这样问题转变为在数组中找指定数字了。
HashMap result = new HashMap<Integer,Integer>;
for(int i = 1; i <= 44 ; i++){
int beOrNot = intArray.indexOf(i);
if( beOrNot != -1){
continue;
}else{//当在数组中索引相同情况要排除掉,不做赘述。
int beOrNot2 =intArray.indexOf(88 - i);
if(beOrNot2 !=-1){
result.put(i,88-i)
}else{
System.out.print("不存在");
}
}
}
}