LeetCode 两数之和[Java实现]
源链接:https://leetcode-cn.com/problems/two-sum/
题目
给定一个整数数组nums
和一个整数目标值target
,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入指挥对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
解题1 暴力法
57 / 57 个通过
用时: 49 ms
内存消耗: 41.3 MB
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] re=new int[2];
for(int i=0;i<nums.length-1;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i]+nums[j]==target){
re[0]=i;
re[1]=j;
}
}
}
return re;
}
}
解题2
57 / 57 个通过测试用例
执行用时: 2 ms
内存消耗: 41.3 MB
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];
}
}
解题3
57 / 57 个通过测试用例
执行用时: 0 ms
内存消耗: 41.1 MB
class Solution {
public int[] twoSum(int[] nums,int target){
if(nums.length<2){
return new int[0];
}else{
int left=0;
int right=nums.length-1;
Map<Integer,Integer> hash=new HashMap<>();
while(left<=right){
if(hash.containsKey(target-nums[left])){
return new int[]{left,hash.get(target-nums[left])};
}else{
hash.put(nums[left],left++);
}
if(hash.containsKey(target-nums[right])){
return new int[]{hash.get(target-nums[right]),right};
}else{
hash.put(nums[right],right--);
}
}
return new int[0];
}
}
}