给定一个升序整型数组,以及一个指定的值。打印出数组中两数之和为指定值的一个整数对,要求复杂度为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"

本文介绍两种算法,用于在有序数组中查找两个数之和等于给定值的整数对,确保时间复杂度为O(n)。第一种算法采用左右指针逼近的方法,第二种算法通过查找剩余值得方式实现。
1818

被折叠的 条评论
为什么被折叠?



