1.说明
题目是,给定一个数组,和一个目标值,找出数组中的3个数,这3个数之和离目标值最近。
可以直接想出的方法就是三重循环遍历。为了减少计算,需要先对数组进行排序,然后根据遍历中当前3个元素之和与目标值的关系判定是否需要继续向后遍历。
2.代码
/*** @param {number[]} nums* @param {number} target* @return {number}*/
var threeSumClosest = function(nums, target) {var list = nums.sort(function (a, b) {return a - b;});var distance = Math.abs((list[0] + list[1] + list[2]) - target);var tempSum;for (var i = 0; i < list.length; i++) {for (var j = i + 1; j < list.length; j++) {for (var k = j + 1; k < list.length; k++) {if (Math.abs(list[i] + list[j] + list[k] - target) > distance) {if ((list[i] + list[j] + list[k] - target) > 0) {break;}}else {distance = Math.abs(list[i] + list[j] + list[k] - target);tempSum = list[i] + list[j] + list[k];}}}}return tempSum;
};