algorithm
algorithm copied to clipboard
如何快速找出两个数之和等于某一个值的两个数?
如何从一个数组中快速找出两个数之和等于某一个值的两个数?
穷举法
用for循环的嵌套,穷举,这种方法的时间复杂度为O(n^2),是最差的方法
快排+双指针
function pickNumOfSum(arr,sum){
var i,j;
var n = arr.length;
for(i=0,j=n-1;i<j;){
if(arr[i]+arr[j]===sum){
return [i,j]
}else if(arr[i]+arr[j]<sum){
i++;
}else{
j--;
}
}
return [-1,-1];
}
var a = [10,8,98,3,5,9,8,20];
a = a.sort(function(x,y){
return x-y;
})
pickNumOfSum(a,108)
如果换成是找出三个数之和满足某一条件的值呢?
` var d = [10,8,98,3,5,9,8,20] var d_copy = [].contact(d)
d.forEach((t, k) => { const index = d_copy.indexOf(sum - t) if(index > -1 && index != k) { d_copy.splice(index, 1) d_copy.splice(k, 1) // number1 = t, number2 = sum - t } }) `
const twoSum = function (nums, target) {
const map = {}
for (let i = 0; i < nums.length; i++) {
if (map.hasOwnProperty(target - nums[i])) {
return [i, map[target - nums[i]]]
}
map[nums[i]] = i
}
}
twoSum([2, 7, 11, 15], 9)
function getTwoNum(target, arr) {
var map = {};
for (let i = 0; i < arr.length; i++) {
if (map[target - arr[i]] === undefined) {
map[arr[i]] = i;
} else {
return [arr[map[target - arr[i]]], arr[i]];
}
}
return [];
}