中国建设银行用e路这么进网站,儿童编程,wordpress 移动端m,免费加速服务器翻译 给定一个有n个整数的数组S#xff0c;找出S中3个数#xff0c;使其和等于一个给定的数#xff0c;target。返回这3个数的和#xff0c;你可以假定每个输入都有且只有一个结果。例如#xff0c;给定S {-1 2 1 -4}#xff0c;和target 1。那么最接近target的和是2。… 翻译 给定一个有n个整数的数组S找出S中3个数使其和等于一个给定的数target。返回这3个数的和你可以假定每个输入都有且只有一个结果。例如给定S {-1 2 1 -4}和target 1。那么最接近target的和是2。(-1 2 1 2)。 原文 Given an array S of n integers,
find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers.
You may assume that each input would have exactly one solution.For example, given array S {-1 2 1 -4}, and target 1.The sum that is closest to the target is 2. (-1 2 1 2). 思考 也许我已经开始体会到上一题中别人写的方法的思想了。 在这个题目中我们要做以下几件事 用sort对输入的数组进行排序求出长度lencurrent之所以要小于len−2是因为后面需要留两个位置给front和back始终保证front小于back计算索引为current、front、back的数的和分别有比target更小、更大、相等三种情况更小如果距离小于close那么close便等于target−sum而结果就是sum。更大的情况同理如果相等那么要记得将0赋值给closeresult就直接等于target了随后为了避免计算重复的数字用三个do/while循环递增或递减它们代码 class Solution
{
public:int threeSumClosest(vectorint nums, int target) {sort(nums.begin(), nums.end());int len nums.size();int result INT_MAX, close INT_MAX;for (int current 0; current len - 2; current) {int front current 1, back len - 1;while (front back) {int sum nums[current] nums[front] nums[back];if (sum target) {if (target - sum close) {close target - sum;result sum;}front;}else if (sum target) {if (sum - target close) {close sum - target;result sum;}back--;}else {close 0;result target;do {front;} while (front backnums[front - 1] nums[front]);do {back--;} while (front backnums[back 1] nums[back]);}}while (current len - 2 nums[current 1] nums[current]) {current;}}return result;}
}; 和本道题关联密切的题目推荐 传送门LeetCode 15 3Sum3个数的和 传送门LeetCode 18 4Sum4个数的和