每日一题15

  • Post author:
  • Post category:其他


给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

方法一:跟每日一题14很相似,先排序,再双指针。

class Solution {

public:

void isans(int sum, int* ans,int target){

if(abs(sum-target)<abs(*ans – target)){

*ans = sum;

}

}

int threeSumClosest(vector<int>& nums, int target) {

int n = nums.size();

if(n == 3){

return nums[0]+nums[1]+nums[2];

}

sort(nums.begin(),nums.end());

int ans = 1e7;

for(int first = 0;first<n;first++){

if(first>0 && nums[first] == nums[first-1]){

continue;

}

int third = n-1;

int second = first+1;

while(second < third){

int sum = nums[first]+nums[second]+nums[third];

if(nums[first]+nums[second]+nums[third] == target){

return target;

}

isans(sum,&ans,target);

if(sum > target){

third–;

}else{

second++;

}

}

}

return ans;

}

};



版权声明:本文为a22025340原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。