const fn=(arr,x)=>{
const len=arr.length;
for(let i=0;i<len;i++){
const another=x-arr[i]
for(let j=i+1;j<len;j++){
if(arr[j]===another){
return [arr[i],arr[j]]
}
}
}
}
fn([1,2,3,4,5,6],3) //[1,2]
写一个方法,传入数字x,从一个一维数组里找到两个数字符合“n1 + n2 = x”
const fn=(arr,x)=>{
const len=arr.length;
for(let i=0;i<len;i++){
const another=x-arr[i]
for(let j=i+1;j<len;j++){
if(arr[j]===another){
return [arr[i],arr[j]]
}
}
}
}
fn([1,2,3,4,5,6],3) //[1,2]
const findSum = (array, sum) => {
let pair;
array.find((a, i) => !isNaN(array.slice(i + 1).find(b => a + b === sum && (pair = [a, b]))));
return pair;
};
findSum([2, 4, 8, 6, 10, 9, 7], 16); // [6, 10]
试着只用数组方法写,性能应该不算特别好 😅
const findSum = (array, sum) => { let pair; array.find((a, i) => !isNaN(array.slice(i + 1).find(b => a + b === sum && (pair = [a, b])))); return pair; }; findSum([2, 4, 8, 6, 10, 9, 7], 16); // [6, 10]试着只用数组方法写,性能应该不算特别好 😅
尽然不容易看懂
/*方法说明
*@method arrFindSum
*@for 所属类名
*@param
* arr{arr} 目标数组
* sum{num} 目标数字
*@return {arr} 返回数组中符合的项
*/
let arrFindSum = function (arr, sum) {
if(!Array.isArray(arr) || !Number.isFinite(sum)) return alert('请输入符合条件的参数')
let arrSum = []
arr.map((e, index1) => {
arr.forEach((ele, index2) => {
if( index1<index2 && (e + ele == sum)){
arrSum.push({'key1': index1, 'val1': arr[index1], 'key2':index2, 'val2' : arr[index2]})
}
})
})
return arrSum
}
arrFindSum([1,2,3,7,5,9,7,8,9,6,5,4,1], 10)
const find2 = (arr, x) => {
const ret = [];
for(let i = 0; i < arr.length - 1; i++) {
for(let j = i+1; j < arr.length; j++) {
if(arr[i] + arr[j] === x) {
ret.push([arr[i], arr[j]])
}
}
}
return ret;
}
const findSum = (array, sum) => [
array.find((a, i) => (b = array.lastIndexOf(sum - a)) >= 0 && b > i),
array[b]
];
findSum([2, 4, 8, 6, 10, 9, 7], 16); // [6, 10]
优化了一下算法,第一个数从左往右找,第二个数从右往左找,应该算是最简了
const findSumNumber = (arr, x) => {
const len = arr.length;
for (let i = 0; i < len; i++) {
const a = arr[i];
const restNum = arr.slice(i + 1).find(b => a + b === x);
if (restNum !== undefined && restNum !== null) {
return [a, restNum];
}
}
return null;
};
这其实是leetcode的第一题 two sum
let twoSum = function(nums, target) {
let obj = {}
for (let i = 0; i < nums.length; i++) {
if (obj[target - nums[i]] !== undefined) {
return [nums[obj[target - nums[i]]], nums[i]]
} else {
obj[nums[i]] = i
}
}
}
let findAllTwoSum = function(nums, target) {
let obj = {}, res = []
for (let i = 0; i < nums.length; i++) {
if (obj[target - nums[i]] !== undefined) {
res.push([nums[obj[target - nums[i]]], nums[i]])
} else {
obj[nums[i]] = i
}
}
return res
}
学习不打烊,充电加油只为遇到更好的自己,365天无节假日,每天早上5点纯手工发布前端知识点(死磕自己,愉悦大家)。希望大家在这浮夸的前端圈里,保持冷静,坚持每天花20分钟来学习与思考。在这千变万化,类库层出不穷的前端,建议大家不要等到找工作时,才狂刷题,提倡每日学习!欢迎大家关注3+1开源项目!希望大家每人去学习与思考!(不要为了谁而来,要为自己而努力!)