两个数相加寻找目标数
通过建立补值与序号的Hash表,遍历数组中的元素判断是否存在Hash表中的补值,找到前面与其值互补的序号。
这哥们的代码效率超过类99.06%的人。
import java.util.HashMap; import java.util.Map; class Solution { public int[] twoSum(int[] nums, int target) { int[] indexs = new int[2]; // 建立k-v ,一一对应的哈希表 HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>(); for(int i = 0; i < nums.length; i++){ if(hash.containsKey(nums[i])){ indexs[0] = i; indexs[1] = hash.get(nums[i]); return indexs; } // 将数据存入 key为补数 ,value为下标 hash.put(target-nums[i],i); //建立补数与序号的键值,如果数组中的书和hash表中的补数相同,那么就可以找到
//对应的序号,与当前序号组成目标数。 } // // 双重循环 循环极限为(n^2-n)/2 // for(int i = 0; i < nums.length; i++){ // for(int j = nums.length - 1; j > i; j --){ // if(nums[i]+nums[j] == target){ // indexs[0] = i; // indexs[1] = j; // return indexs; // } // } // } return indexs; } }