Javascript剑指offer42题:和为S的两个数字
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
思路分析
因为是递增的数组 又是求和 所以也是要有两个指针 一个是首一个是尾 相加比sum大的话就让tail–
相加比sum小的话就让head++
就是求首位的和 满足条件的值(head)(tail)放入数组
循环条件是while(head<tail)因为是从两边逼近的
知识点
寻找数组中最大或者最小元素的下标是没有直接的方法的!只能先找出一个这个数字Math.min.apply(null, result) 然后再用result.indexOf(min)判断
代码
function FindNumbersWithSum(array, sum)
{
var tail = array.length-1
var head = 0
var result = []
var multiple = []
while(head<tail){
var tempSum = array[head]+array[tail]
if(tempSum === sum){
result.push([array[head],array[tail]])
multiple.push(array[head]*array[tail])
head++
tail--
}else if(tempSum > sum){
tail--
}else {
head++
}
}
if(result.length<=0){
return []
}
// 要求数组中最小项的位置 没有简便方法不要多想
var min = Math.min.apply(null,multiple)
var index = multiple.indexOf(min)
return result[index]
}
console.log(FindNumbersWithSum([1,2,4,7,14,15],16))