返回数组中两个值相加等于目标值的索引
1)java实现:
- 使用循环实现,时间复杂度是O(n的平方),空间复杂度O(1)
52ms
class Solution {
public int[] twoSum(int[] nums, int target) {
int []result=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){
result[0]=i;
result[1]=j;
return result;
}
}
}
throw new IllegalArgumentException("No two sum solution");
}
}
- 使用HashMap实现:时间复杂度O(n),空间复杂度O(n)
11ms
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map=new HashMap();
for(int i=0;i<nums.length;i++){
map.put(nums[i],i);
}
int complement;
for(int i=0;i<nums.length;i++){
complement=target-nums[i];
if(map.containsKey(complement)&&map.get(complement)!=i)
return new int[] {i,map.get(complement)};
}
throw new IllegalArgumentException("No two sum solution");
}
}
2)JavaScript实现
- 使用循环实现
200ms
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
for(let i=0;i<nums.length-1;i++)
for(let j=i+1;j<nums.length;j++){
if(nums[i]+nums[j]===target){
return [i,j];
}
}
};
- 使用map实现
112ms
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let map=new Map();
for(let i=0;i<nums.length;i++){
map.set(nums[i],i);
}
for(let i=0;i<nums.length;i++){
let complement=target-nums[i];
if(map.has(complement)&&map.get(complement)!==i)
return [i,map.get(complement)];
}
};