1 两数之和 经典力扣第一题,求两数之和。给定一个整形数组,并给定一个target值,判断在数组中是否存在两个元素,它们的和等于给定的target值,并返回这两个数组的下标。
例:
1 2 输入: nums = [2, 7, 11, 15], target = 9 输出: indexes = [0, 1]
#### 1.1 暴力解法
用双重循环来遍历数组,取出一个数组元素,并与后面的每一个元素进行相加然后比较是否与target相等,如果相等则直接返回当前元素的下标,否则返回null。 看代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Solution { public int [] twoSum(int target, int [] nums) { int [] indexes = new int [2 ]; for (int i = 0 ; i < nums.length - 1 ; i++) { for (int j = i + 1 ; j < nums.length; j++) { if (nums[i] + nums[j] == target) { indexes[0 ] = i; indexes[1 ] = j; return indexes; } } } return null ; } }
上面算法可以达到题目要求,但是时间复杂度比较高,两层循环,时间复杂度为O(n^2)。可以优化
1.2 使用map 使用一个map来存放数据,for循环遍历数组,并判断当前遍历的元素,target-当前元素的值,是否存在在map中,如果存在,说明找到了两个数相加 == target。如果不存在,就放入map中