一、题目
二、解题思路
方法一:暴力枚举
这是最容易想到的一种方法,本质就是二重循环遍历数组,话不多说直接上代码
public int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j < nums.length; j++) {
if(nums[i] + nums[j] == target){
return new int[]{i, j};
}
}
}
return new int[]{};
}
虽说这种方法简单,但在解题过程中我还是感到自己java基础的不牢。比如我一开始if中的代码是这样写的:
后来发现可以直接return new int[]{i, j};
而且我一开始没有在for循环外面写return new int[]{}; 导致代码编译出错,报错提示是:缺少返回值
方法二:哈希表
这是一种我从没接触过的方法,而且数据结构基本上忘光了(偷笑)
所以我们首先回顾一下什么是哈希表:简单来说就是通过hash函数将关键字的值映射到对应的存储地址中。常用的哈希函数方法有直接定址法、除留余数法等,定址时还涉及到哈希冲突的解决。
注意到方法一的时间复杂度较高的原因是寻找 target – x 的时间复杂度过高。因此,我们需要一种更优秀的方法,能够快速寻找数组中是否存在目标元素。如果存在,我们需要找出它的索引。
使用哈希表,可以将寻找 target – x 的时间复杂度降低到从 O(N)降低到 O(1)。
这样我们创建一个哈希表,对于每一个 x,我们首先查询哈希表中是否存在 target – x,然后将 x 插入到哈希表中,即可保证不会让 x 和自己匹配。
作者:力扣官方题解
链接:https://leetcode.cn/problems/two–sum/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; ++i) {
if (hashtable.containsKey(target - nums[i])) {
return new int[]{hashtable.get(target - nums[i]), i};
}
hashtable.put(nums[i], i);
}
return new int[0];
}
}
作者:力扣官方题解
链接:https://leetcode.cn/problems/two-sum/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
好家伙,你一波操作猛如虎,而我愣是没看懂……好吧,看来确实没学扎实,只能一个一个概念去学了
此处省略很多时间,太多要学的啦
class Solution {
public int[] twoSum(int[] nums, int target) {
// 创建一个哈希表,用于存储元素和索引的映射关系
Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
// 遍历数组中的每个元素
for (int i = 0; i < nums.length; ++i) {
// 计算目标值与当前元素的差值
int complement = target - nums[i];
// 如果哈希表中存在差值,则返回结果
if (hashtable.containsKey(complement)) {
// 返回两个元素的索引
return new int[]{hashtable.get(complement), i};
}
// 将当前元素和索引加入哈希表
hashtable.put(nums[i], i);
}
// 如果没有找到符合条件的两个元素,返回空数组
return new int[0];
}
}
原文地址:https://blog.csdn.net/lbcbjtlhmjq/article/details/134748431
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_26724.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!