[LeetCode]1.Two Sum 两数之和(Java)
原题地址:
题目描述:
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
解答方法:
1.暴力方法:
遍历所有数的组合使其和等于target
时间复杂度是O(n^2)
代码如下:
2.排序+双指针:
先将数组进行排序,然后通过双指针进行加和与target对比大小。
算法的时间复杂度是O(nlogn+n)=O(nlogn)
代码如下:
3.HashMap:
先将数组存储在一个哈希表中,建立数字和其坐标位置之间的映射。在通过遍历数组,用target减去该数字,就得到了要在哈希表中查找的数字。最后记录下这两个数字的下标输出即可。
时间复杂度为O(n),同时空间复杂度也是O(n)
代码如下: