题目:
方法一:
暴力解法:双循环遍历
class Solution {
public int[] twoSum(int[] nums, int target) {
//暴力法
int[] array = new int[2];
for(int i=0;i<nums.length;i++){
for(int j=i+1;j<nums.length&&j>i;j++){
if(nums[i]+nums[j]==target){
array[0]=i;
array[1]=j;
return array;
}
}
}
return null;
}
}
时间复杂度:O(n2)
方法二:
使用hashmap,第一次遍历,把target-nums[i]值存入hashmap,然后第二次遍历,在map里面查找,但是要排除第二次调用自身的情况
class Solution {
int[] arr = new int[2];
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for(int i =0;i<nums.length;i++){
map.put(target-nums[i],i);
}
for(int i =0;i<nums.length;i++){
if(map.containsKey(nums[i])&&map.get(nums[i])!=i){
arr[0] = i;
arr[1] = map.get(nums[i]);
return arr;
}
}
return null;
}
}
时间复杂度:O(n)
空间复杂度:O(n)
一遍哈希
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++){
int result = target - nums[i];
if(map.containsKey(result)){
return new int[] {map.get(result), i};
}
map.put(nums[i],i);
}
return null;
}
}