42-和为S的两个数字-双指针
2020-05-27 本文已影响0人
马甲要掉了
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
分析
使用双指针。此外相距最远,乘积最小。
代码
function FindNumbersWithSum(array, sum) {
if (array.length < 2) return [];
let left = 0,
right = array.length - 1;
const res = [];
while (left < right) {
if (array[left] + array[right] < sum) {
left++;
} else if (array[left] + array[right] > sum) {
right--;
} else {
res.push(array[left], array[right]);
break;
}
}
return res;
}
自己写的emmm
function FindNumbersWithSum(array, sum)
{
let cc = sum *sum;
let o1;
let o2;
// write code here
for(let i=0;i<(array.length/2);i++){
let j = array.indexOf(sum-array[i])
if(j!=-1){
let m = array[i];
let n = array[j];
if(cc>m*n){
cc = m*n;
o1 = m;
o2 = n;
}
}
}
if(o1===undefined||o2===undefined){
return [];
}
return [o1,o2]
}
2
function FindNumbersWithSum(arr,s) {
for(let i=0;i<arr.length;i++){
let j = arr.indexOf(s-arr[i]);
if(j!==-1){
return [arr[i],arr[j]]
}
}
return [];
}