当前位置: 代码迷 >> 综合 >> Leecode #16 3Sum Closest
  详细解决方案

Leecode #16 3Sum Closest

热度:29   发布时间:2024-01-19 12:37:04.0

一、 问题描述

Leecode第十六题,题目为:
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).

问题理解为

给定一个包含n个整数的数组和一个目标整数,在数字中找到三个整数,使它们的和最接近目标,返回三个整数的和。您可以假设每个输入都只有一个解。

例:

给定数组:nums = [- 1, 2, 1, -4], target = 1。

最接近目标的和是2。(-1 + 2 + 1 = 2)

二、算法思路
1、先将给定数组排序
2、计算三数之和,找到最接近给定值的

三、实现代码

class Solution {  public:  int threeSumClosest(vector<int> &num, int target){  int res = num[0] + num[1] + num[2];    std::sort(num.begin(), num.end());  for (int i = 0; i <=num.size(); i++) {  int num2 = i + 1; int num3 = num.size() - 1;   while (num2 < num3) {  int sum = num[i] + num[num2] + num[num3];  if (abs(sum - target) < abs(res - target))  res = sum;  if (sum < target) num2++;  else if (sum > target) num3--;     else{  num2++; num3--;  }  }  }  return res;  }  
};