一、暴力解法:时间复杂度为O(n^2)
class Solution {
public int[] twoSum(int[] nums, int target) {
int i=0;
int j=0;
for(i=0; i<nums.length; i++){
for(j=i+1; j<nums.length; j++){
if(nums[i]+nums[j] == target){
int output[] = {i,j};
return output;
}
}
}
int output[] = {i,j};
return output;
}
}
注意:
length
计算数组长度- 数组定义是
{}
,而不是[]
二、HashMap解法:用一个 HashMap 来记录数组中的每一个元素,元素的索引作为哈希表的 key,元素本身作为 value,当发现target - i在哈希表中存在时,就可以直接返回这两个数的索引了。
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map =new HashMap<>();
for(int i=0; i<nums.length; i++){
int complement = target - nums[i];
if (map.containsKey(complement)){
return new int[]{map.get(complement),i};
}
map.put(nums[i],i);
}
throw new IllegalArgumentException("没找到");
}
}
注意:
- 在HashMap中,查找某一个key,使用函数
contaisKey()
,此处contain后有s - HashMap加入数据的函数为
put()
,而不是set()
- 找不到数据时,没有返回值,抛出
IllegalArgumentExceprion()
异常