LeetCode 16 3Sum Closest(最接近的3个数的和)

翻译给定一个有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 given number, target. Return integers. You may assume that each input would have exactly one solution.For example, given array S = {–4}, and target = 1.The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).思考

也许我已经开始体会到上一题中别人写的方法的思想了。

在这个题目中,我们要做以下几件事:

代码class Solution{public:int threeSumClosest(vector<int>& 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 < back&&nums[front – 1] == nums[front]);do {back–;} while (front < back&&nums[back + 1] == nums[back]);}}while (current < len – 2 && nums[current + 1] == nums[current]) {current++;}}return result;}};

和本道题关联密切的题目推荐:

传送门:LeetCode 15 3Sum(3个数的和) 传送门:LeetCode 18 4Sum(4个数的和)

造物之前,必先造人。

LeetCode 16 3Sum Closest(最接近的3个数的和)

相关文章:

你感兴趣的文章:

标签云: