解法一:暴力做法,两层for循环,遍历所有情况看相加是否等于⽬标和。
class Solution {
public int[] twoSum(int[] nums, int target) {
for(int i = 0;i < nums.length;i ++ ){
for(int j = i + 1;j < nums.length;j ++ ){
if(nums[i] + nums[j] == target) return new int[]{
i,j};
}
}
return new int[0];
}
}
//时间复杂度:两层 for 循环,O(n²)
//空间复杂度:O(1)
解法二:利用哈希表
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> hashmap = new HashMap<>();
for(int i = 0;i < nums.length;i ++ ){
if(hashmap.containsKey(target - nums[i])){
return new int[]{
hashmap.get(target - nums[i]),i};
}
hashmap.put(nums[i],i);
}
return new int[0];
}
}
//时间复杂度:⽐解法⼀少了⼀个 for 循环,降为 O(n)
//空间复杂度:所谓的空间换时间,这⾥就能体现出来, 开辟了⼀个 hash table ,
//空间复杂度变为 O(n)