LeetCode1. 两数之和

网友投稿 560 2022-11-23

LeetCode1. 两数之和

LeetCode1. 两数之和

题目描述:给定一个整数数组 ​​nums​​​ 和一个目标值 ​​target​​,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]

解题思路:

题目想要解出来不难

一、暴力法 时间复杂度:O(n^2),

对于每个元素,我们试图通过遍历数组的其余部分来寻找它所对应的目标元素,这将耗费 O(n)*O(n) 的时间。因此时间复杂度为 O(n^2)。空间复杂度:O(1)。

二、一遍哈希表 在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回。

时间复杂度:O(n), 我们只遍历了包含有 n 个元素的列表一次。在表中进行的每次查找只花费 O(1)的时间。

空间复杂度:O(n), 所需的额外空间取决于哈希表中存储的元素数量,该表最多需要存储 n个元素。

代码

一、暴力法:

public static 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[j] == target - nums[i]) return new int[] { i, j }; return new int[] { -1, -1 }; }

执行用时 : 41 ms, 在Two Sum的Java提交中击败了49.82% 的用户

内存消耗 : 37.7 MB, 在Two Sum的Java提交中击败了84.63% 的用户

二、一遍hash表

public int[] twoSum(int[] nums, int target) { Map record = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int t = target - nums[i]; if(record.get(t) != null) { return new int[]{record.get(t), i}; } else { record.put(nums[i], i); } } return new int[]{-1,-1}; }

执行用时 : 7 ms, 在Two Sum的Java提交中击败了89.51% 的用户

内存消耗 : 38.9 MB, 在Two Sum的Java提交中击败了52.16% 的用户

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:单例模式(单例模式作用、常见形式、代码实现)
下一篇:解决:com.netflix.client.ClientException: Load balancer does not have available server for client: XXX
相关文章

 发表评论

暂时没有评论,来抢沙发吧~