两数之和
之前都是用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");
}
}
最后的改进
来源:CSDN
作者:宫城诗
链接:https://blog.csdn.net/qq_36344771/article/details/103493219