两数之和LeetCode

/** * 无脑暴力: * 时间复杂度 : n^2 * 空间复杂度 : 1 * 70ms * 38.5MB */ public static int[] traverseTwoSum(int[] nums, int target){ int len = nums.length; for (int i = 0; i < len; i++) { for (int j = i+1; j < len; j++) { if(nums[i]+nums[j]==target){ return new int[]{i,j}; } } } return null; } /** * 因为哈希表的查找速度非常的快,我们可以采用hash表去解决问题. * 时间: n * 空间: n * 4ms * 36.2MB * */ public static int[] secondHashTwoSum(int[] nums, int target){ Map<Integer, Integer> map = new HashMap<>(); int len = nums.length; for (int i = 0; i < len; i++) { // 根据键去找 值 map.put(nums[i],i); } int findNum; for (int i = 0; i < len; i++) { findNum = target - nums[i]; if(map.containsKey(findNum)&&map.get(findNum)!=i){ return new int[]{i,map.get(findNum)}; } } return null; } /** * 改进为一次hash * 时间: n * 空间: n * 4ms * 36.2MB * */ public static int[] firstHashTwoSum(int[] nums, int target){ Map<Integer, Integer> map = new HashMap<>(); int len = nums.length,findNum; for (int i = 0; i < len; i++) { findNum = target-nums[i]; if(map.containsKey(findNum)){ return new int[] {map.get(findNum),i}; } map.put(nums[i],i); } return null; }
posted @ 2019-06-20 10:38  X-POWER  阅读(225)  评论(0编辑  收藏  举报