一开始用的方法比较笨,解题效率较低,用了两次遍历,时间复杂度为O(n²)
!!!太粗心了,if后面有一个返回值,如果没有走if那条路的话,就没有返回值,就会报错,所以要把情况考虑清楚。
之前的暴力解法用了双层for循环,这里是用了两次for循环
public int[] twoSum(int[] nums, int target) { //定义一个Hashmap数组 HashMap3.解法二:hashmap解法继续优化map = new HashMap<>(); //new一个a数组存放找到的数字的位置 int[] a = new int[2]; for(int i = 0; i < nums.length; i ++){ map.put(nums[i],i); } for(int i = 0; i < nums.length; i ++){ int temp = target - nums[i]; //如果temp在map集合里面并且与之前的不是同一个 if(map.containsKey(temp) && map.get(temp) != i){ a[0] = i; a[1] = map.get(temp); } } return a; }
之前用的是两个for循环,这次用的是一次for循环,不过代码较难理解
public int[] twoSum(int[] nums, int target) { HashMapmap = new HashMap<>(); for(int i = 0; i < nums.length; i ++){ //如果nums[i]在map集合中,则输出nums[i]的value和i if(map.containsKey(nums[i])){ return new int[] {map.get(nums[i]),i}; } //如果不在map集合中,则将target-nums[i]和i放入集合中 map.put(target - nums[i],i); } return new int[] {1,1}; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)