LeetCode--3Sum Closest

LeetCode--3Sum Closest #3Sum Closest更多技术博客 http://vilins.top/##题目Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input would have exactly one solution.Example:Given array nums [-1, 2, 1, -4], and target 1. The sum that is closest to the target is 2. (-1 2 1 2).##分析求三个数的和的时候我们可以先确定一个选定的数然后通过另外两个数的和来确定答案我们先将数组排好序设定两个下标一个是选定的下标的下一个另外一个是数组的最后一个将三个数相加有一下三种情况和target直接返回。和 target记录当前的和并比较然后小的下标往前移动。和 target。记录当前的和并比较然后大的下标往前移动。最后通过记录的和与target相差最小的值返回。##源码int threeSumClosest(int* nums, int numsSize, int target) { //对数组进行排序 for(int i 0; i numsSize; i) { for(int j 0; j numsSize - i - 1; j) { if(nums[j] nums[j1]) { int temp nums[j]; nums[j] nums[j1]; nums[j1] temp; } } } int tag 9999; int flat -1; //思路是先选定一个下标通过另外两个数字的和确定最小的。从两边开始 for(int i 0 ; i numsSize; i) { int begin i 1; int end numsSize - 1; int left target - nums[i]; while(begin end) { int sum nums[begin] nums[end]; if(sum left) { begin; if(abs(left - sum) tag) { tag abs(left - sum); flat 0; } } else if(sum left) { end--; if(abs(left - sum) tag) { tag abs(left - sum); flat 1; } } else { return (nums[i] nums[begin] nums[end]); } } } if(flat 0) { return target-tag; } else { return targettag; } }更多技术博客 http://vilins.top/