两数之和
之前都是用python来完成的力扣上的题目,听一个师兄说还是用编译型语言来完成题目比较好,复习了一下java,然后用java来完成题目
第一个方法还是暴力破解法
遍历之后用一个变量存储差值,然后来遍历nums[j]有没有等于这个差值,然后返回
class Solution {public int[] twoSum(int[] nums, int target) {int[] result = new int[2];for(int i=0;i<nums.length;i++){int dif = target-nums[i];for(int j=i+1;j<nums.length;j++){if(nums[j]==dif){result[0] = i;result[1] = j;}}}return result;}
}
第二个方法利用哈希表进行处理,会减少查询时间
基础中也学习到过哈希表,是一个map键值(key)-数值(value)对应类型存储数据的接口,数组中我们索引的是数组下标来对内容进行查询,但是在map中我们通过对象来进行索引,索引的对象叫做key,获取到的内容叫做value
hashmap是map的实现类,hashmap存储数据采用哈希表结构,元素的存取顺序不能保证一致,但键值是不重复的,唯一的。
class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map = new HashMap<Integer,Integer>();int[] result = new int[2];for(int i =0;i<nums.length;i++){int dif = target-nums[i];if(map.get(dif) != null){result[0] = i;result[1] = map.get(dif);}else{map.put(nums[i],i);}}return result;}
}
第三个方法
官方给的答案是进行了两遍哈希表,第一遍把数组的数都存放在哈希表中,第二遍进行遍历寻找。
其他
class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map = new HashMap<Integer,Integer>();for(int i =0;i<nums.length;i++){int dif = target-nums[i];if(map.get(dif) != null){return new int[]{map.get(dif),i};}map.put(nums[i],i);}throw new IllegalArgumentException("No two sum solution");}
}
最后的改进