第一种解法就是把每个数都放在哈希表中 然后去找对应的数
class Solution { public int[] twoSum(int[] nums, int target) { HashMap hm = new HashMap(); for ( int i = 0; i < nums.length; i++) { hm.put(nums[i], i); } for(int i = 0 ; i < nums.length;i++) { if(hm.containsKey(target-nums[i])) { if(i!=hm.get(target-nums[i])){ int arr [] = {i,hm.get(target-nums[i])}; return arr;} } } return null; } }
第二种解法 分开判断 不满足就放在哈希表,满足就取出
/* * 思路:如果没有找到就添加到哈希表中 * 就用一次遍历就可以得到结果 */ public class solution { public int[] twoSum(int[] nums, int target) { int[] ans = new int[2]; HashMap<Integer, Integer> hs = new HashMap<Integer, Integer>(); for (int i = 0; i < nums.length; i++) { if (!hs.containsKey(target - nums[i])) { hs.put(nums[i], i); } else if (hs.containsKey(target - nums[i])) { ans[0] = i; ans[0] = hs.get(target - nums[i]); } } return ans; } }
优化 第二个if是不需要的
class Solution { HashMaphm ; public int[] twoSum(int[] nums, int t) { int [] ans = new int[2] ; hm = new HashMap(); for(int i = 0 ; i < nums.length ; i++) { if(hm.containsKey(t-nums[i])) { ans[1] = i; ans[0] = hm.get(t-nums[i]); } hm.put(nums[i],i ); } return ans; } }