题目来源:链接: [https://leetcode-cn.com/problems/3sum-closest/].
16.最接近的三数之和
1.问题描述
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
2.我的解决方案
方法1. 首先想到的当然时暴力解决法(但是超时,3个for循环搞定)时间复杂度为大O的3次方:
暴力法思路如下:
- 将 所有可能的 三个数相加 的 和 统计出来,存入容器中。
- 分别与target 相减(负数取绝对值),存入另一个容器中
- 然后从小到大排序,第一个就是要求的值。
暴力法代码如下:
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int l = nums.size();
int best = nums[0]+nums[1]+nums[2];
for(int i=0;i<l-2;i++)
{
for(int j=i+1;j<l-1;j++)
{
for(int k=j+1;k<l;k++)