学习内容:
1. 分析题目
2. 使用Java用多种方法解答题目
3. 相关题目
1. 题目分析
意思就是这样:(见下图)
那么就有几个问题需要解决:
- 实现元素相加
- 相加后的值与target比较
- 记录下标
- 若比较值为相等则需返回下标值
- 若不相等则需继续寻找
2. 多种解决方法(Java)
2.1 暴力解决【咔嚓咔嚓线性法】
Q: 实现元素相加
A: 固定一个元素,开始遍历其他的,并使之与固定元素相加
Q:相加后的值与target比较
A:用一个变量存下相加后的结果,与target比较。
代码如下:
class Solution {
public int[] twoSum(int[] nums, int target) {
int []current=new int[2];
int sum;
for(int i=0;i<nums.length;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i]+nums[j]==target)
{
current[0]=i;
current[1]=j;
}
}
}
return current;
}
}
2.2 优化再优化(从leetcode大佬那学习得来!他讲的很好诶!)
为了不抄袭,我直接把大佬的粘贴过来!(后面附有链接!!和版权!)
// 时间复杂度:O(n)
// 空间复杂度:O(n)
// 空间换时间
public int[] twoSum(int[] nums, int target) {
if (nums == null || nums.length == 0) return new int[0];
// 数据预处理
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) { // O(n)
map.put(nums[i], i);
}
for (int i = 0; i < nums.length; i++) { // O(n)
int x = nums[i];
// 哈希查找 - O(1)
if (map.containsKey(target - x)) {
int index = map.get(target - x);
// i 和 index 不是同一个元素,同一个元素不能使用两次
if (i != index) return new int[]{i, index};
}
}
return new int[0];
}
作者:tangweiqun
链接:https://leetcode-cn.com/problems/two-sum/solution/zhu-jian-you-hua-yi-zhi-dao-zui-you-pei-sexli/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我就来解释一下好了:
Q: 为什么使用HashMap而不是HashSet?
A:HashSet无法直接存储下标,或者说,在存储时还需要另一个数组。不然查找的时候依旧要遍历,并没有更加简便。而HashMap可以在存储数字时存下索引(下标)。这样查找时可直接对应,这样的查找时间复杂度是O(1)!!
由于👆上面这个方法有两个for循环,时间复杂度实际上O(2n)的,所以再进行了优化,去掉了一个for循环:(来自同一个大佬。有附有链接!)
// 时间复杂度:O(n)
// 空间复杂度:O(n)
// 空间换时间
public int[] twoSum(int[] nums, int target) {
if (nums == null || nums.length == 0) return new int[0];
int n = nums.length;
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) { // O(n)
int x = nums[i];
// 哈希查找
if (map.containsKey(target - x)) {
int index = map.get(target - x);
return new int[]{i, index};
}
map.put(x, i);
}
return new int[0];
}
作者:tangweiqun
链接:https://leetcode-cn.com/problems/two-sum/solution/zhu-jian-you-hua-yi-zhi-dao-zui-you-pei-sexli/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3 相关题目(来自大佬推荐!还不快看!)
这是一张图!需要自己去找!这都是相关练习!