一、暴力解法:时间复杂度为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()
异常