给定一个升序整型数组,以及一个指定的值。打印出数组中两数之和为指定值的一个整数对,要求复杂度为O(n)
方法一:
计算一左一右两边计算,
array[left] + array[right]
大于 num
right --
;
array[left] + array[right]
小于num
left ++
;
left 与 right 相等就是没有找到了。
function sumArray(array,num){
if(!array.length && !num){
return 'argument error!';;
}
var left = 0,
right = array.length - 1;
while(left != right){
var nowsum = array[left] + array[right];
if(nowsum == num){
return array[left] + '+' + array[right] + '=' + num;
}
else if( nowsum < num){
left ++ ;
}
else if(nowsum > num){
right -- ;
}
}
return 'Not Find!';
}
var arr = [1,2,3,5,7,8,9,10,14,19];
sumArray(arr,15);
//"1+14=15"
方法二:
求得 num
与 array[i]
的差值 remainder
,再到数组中去找remainder
,如果 remainder
存在且不为i
就找到了。
function sumArray2(array,num){
if(!array.length && !num){
return 'argument error!';;
}
for(var i = 0; i < array.length; i ++){
var remainder = num - array[i];
var index = array.indexOf(remainder);
if(index > -1 && index != i){
return array[i] + '+' + remainder + '=' + num;
}
}
return 'Not Find!';
}
var arr = [1,2,3,5,7,8,9,10,19];
sumArray2(arr,15);
//"5+10=15"