本系列是自己刷 LeetCode (语言为:Java)的记录。解题思路不保证都是本人自己想到的,但是可以保证均为本人验证过并且是正确的解法。
题目:
给出一个整数数组,两个数相加满足指定数,返回这两个数在数组中的索引。
其他条件:
1.假定只有一个答案。2.同一项不能重复使用。
解法1:双循环,满足条件时返回循环的索引。注意:因为条件1,所以内循环从 i + 1 开始。
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};
}
}
}
该解法:时间复杂度为 O(n2)。
解法2:使用 HashMap(哈希表),将数组中的值作为key,值对应的 index 作为 value 放入map中。
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i++) {
int complate = target - nums[i];
if(map.containsKey(complate)) {
return new int[]{i, map.get(complate)};
}
map.put(nums[i], i);
}
该解法:时间复杂度为 O(n)。
网友评论