题目:LeetCode两数之和Java
LeetCode是一家全球范围内的在线技术实践和授权平台,拥有丰富的算法练习题库。其中最经典的问题之一是“两数之和”,而且这个问题在很多的招聘面试中都经常被问到。
本文将从多个角度分析LeetCode两数之和问题,通过Java语言解决该问题,并给出全文摘要和3个关键词。
1. 问题描述
给定一个整数数组和一个目标值,在数组中找出和为目标值的两个数。你可以按照任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
2. 解题思路
2.1 暴力枚举法
最简单的方法就是通过暴力枚举法先固定一个数,然后依次遍历数组中的其它数,判断它们的和是否为目标值。
时间复杂度:O(n^2)
2.2 哈希表法
使用哈希表,遍历一遍数组,将每个数的值和下标存入哈希表中。在遍历数组过程中,判断哈希表中是否存在与当前数相加等于目标值的数,若存在则返回它们的下标。
时间复杂度:O(n)
空间复杂度:O(n)
3. Java代码
3.1 暴力枚举法代码
```
class Solution {
public int[] twoSum(int[] nums, int target) {
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 };
}
}
}
throw new IllegalArgumentException("No solution found!");
}
}
```
3.2 哈希表法代码
```
class Solution {
public int[] twoSum(int[] nums, int target) {
Map
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("No solution found!");
}
}
```
4. 总结
在LeetCode两数之和问题中,我们介绍了两种解题思路:暴力枚举法和哈希表法。暴力枚举法的时间复杂度为O(n^2),空间复杂度为O(1);哈希表法的时间复杂度为O(n),空间复杂度为O(n)。并且,在实际的面试过程中,由于暴力枚举法的时间复杂度太高,在数据量大的情况下表现会比较差,因此很多公司并不建议采用。
微信扫一扫,领取最新备考资料