这个问题的本质是快速组合,通常做法是空间换时间,我们可以通过保存键值对的数据结构HashMap来处理,这里有一个算法技巧从结果找因子,已经标记出来。
看一下啊HashMap的查找函数:
?
- 理想情况o(1),没有冲突
- jdk1.7最坏为o(n)
- jdk1.8最坏为o(logn)
?由于这个题目给的条件太宽松了
Map<Integer,Integer> hashMapNums=new HashMap<Integer,Integer>();//通过hashMap这种数据结构进行存储数组元素 jdk8之后其查找速率为O(logn)
int[] result=new int[2];
int length=nums.length;
for(int i=0;i<length;i++){
if(hashMapNums.containsKey(target-nums[i])){ //把数组的value存储为hashmap的key,index存储为value,因为hashmap中一个key具有唯一性,我们要找的是值
result[0]=hashMapNums.get(target-nums[i]);
result[1]=i;
System.out.println(i);
return result;
}
hashMapNums.put(nums[i],i); //未找到结果存在hashmap中
}
return new int[0];
|