题目地址:两数之和
一开始反正什么都没考虑,暴力破解,我的代码就是这样:
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] chs =new int[2];
for(int i=0;i<nums.length;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i]+nums[j]==target){
chs[0]=i;
chs[1]=j ;
}
}
}
return chs;
}
}
结果:
直到看了评论区,进一步优化,用哈希表:
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();
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];
if(map.containsKey(temp)&&map.get(temp)!=i)
return new int[] {i,map.get(temp)};
}throw new IllegalArgumentException("No chs1");
}
}
结果:
这里使用了两个哈希表,用空间的较大消耗换取了时间的大幅提高。是否还有提升空间?下面对以上代码稍作改动使用一个哈希表:
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int temp = target-nums[i];
if(map.containsKey(temp))
return new int[] {map.get(temp),i};
else
map.put(nums[i],i);
}throw new IllegalArgumentException("No chs1");
}
}
结果:
可以看到基本没有变化。