给定一个升序整型数组,以及一个指定的值。打印出数组中两数之和为指定值的一个整数对,要求复杂度为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"
方法二:
【javascript|数组求和为指定数字】求得
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"
参考链接: 找出数组中两数之和为指定值的所有整数对
推荐阅读
- 操作系统|[译]从内部了解现代浏览器(1)
- 人工智能|干货!人体姿态估计与运动预测
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- vue.js|vue中使用axios封装成request使用
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- JavaScript|JavaScript之DOM增删改查(重点)
- 分析COMP122 The Caesar Cipher