1. 两数之和
程序员小航
2022-01-08 14:10
题目
题解
暴力枚举
直接遍历出所有的可能性,一一比较。
class Solution {
public int[] twoSum(int[] nums, int target) {
int length = nums.length;
for (int i = 0; i < length - 1; i++) {
for (int j = i + 1; j < length; j++) {
if (nums[i] + nums[j] == target) {
return new int[]{i, j};
}
}
}
return null;
}
}
很显然这种方式不会很快,因为双层遍历,时间复杂度为 。
哈希表
只需要将已经遍历过的值放在 Hash 表中。
K:存放 target - 当前值 V:存放当前 index
这样只需要判断是否在 Hash 表中即可。
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (map.get(nums[i]) != null) {
return new int[]{map.get(nums[i]), i};
}
map.put(target - nums[i], i);
}
return new int[]{-1, -1};
}
}
-
评论