- 两层循环
var twoSum = function(nums, target) {
for(let i=0;i<nums.length;i++){
for(let j = i+1; j<nums.length;j++){
if(nums[i]+nums[j] == target){
return [i,j]
}
}
}
};
O(n2)
- 一层循环 + 二分查找
var twoSum = function(nums, target) {
let arr = nums.map((item, index) => ({value: item, index:index}));
arr.sort((i,j)=>i.value-j.value);
for(let i = 0;i<nums.length; i++){
let left = i + 1;
let right = nums.length;
const t = target - arr[i].value;
while(left < right){
const mid = Math.floor((left + right) / 2);
if(t == arr[mid].value){
return [arr[i].index, arr[mid].index]
}else if(arr[mid].value < t){
left = mid+1;
}else{
right = mid;
}
}
}
};
- map 哈希表
O(n)
var twoSum = function(nums, target) {
const map = new Map();
for(let i = 0; i < nums.length; i++){
map.set(nums[i], i)
}
for(let i = 0; i<nums.length; i++){
const t = target - nums[i];
if(map.has(t)){
if( i != map.get(t)){
return [i, map.get(t)]
}
}
}
};