难度:easy
1、题目介绍

2、思路分析
一、第一种解法:暴力解法,时间复杂度:
通过移动俩个指针 i 和 j ,不断将 i 和 j 所指向的元素进行相加,如果等于9增加到 int[] rets数组中去

代码:
public static int[] twoSum(int[] nums, int target) {
int[] rets;
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 RuntimeException("two sum solution");
}
※ 注意:
int j = i + 1 : 注意,避免与自己想加,j 指针总是指向 i 指针的后一个元素
二、第二种解法:查找表法,时间复杂度:
通常查找表法有俩种常用的实现方法:1、哈希表 2、平衡二叉搜索树
这个题目并不需要要维护表中数据,所以使用哈希表即可
将 nums数组中元素作为哈希表中key,下标作为value。通过target - nums[i] 来确定另一个符合规则的元素的key。将符合的俩个key增加到数组中

代码:
public static int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> hashTable = new HashMap<>();
int[] rets ;
for (int i = 0; i < nums.length; i++) {
if (hashTable.containsKey(target-nums[i])){
return new int[]{i,hashTable.get(target-nums[i])};
}
//不符合规则,继续放入其他元素
hashTable.put(nums[i],i);
}
throw new RuntimeException("two sum solution");
}
※注意:
哈希表里面的key是元素值,value是元素下标。而返回的是元素下标
由于哈希表中的key都是数字【哈希值就是本身】不存在哈希碰撞问题
两数之和:暴力解法与哈希表优化
本文解析了求解数组中两个元素和为目标值的简单问题,首先介绍了暴力解法的详细步骤及其实现,然后对比讲解了利用哈希表提高查找效率的查找表法。两种方法的时间复杂度对比,适用于初学者理解数据结构在算法中的应用。
2434

被折叠的 条评论
为什么被折叠?



