在力扣刷题时遇到一个问题,如图,编写代码如下,输入某个测试案例测试错误。希望网友给出解答。没有看出哪里得错误。
我得思路就是先构建一个数组absnums,放入nums[i]与target得绝对距离。
在对absnums构建元组tuple。
对tuple得第一个位置,也就是距离排序。
再找出排序后前三个tuple元素得第二个位置,对应nums得位置。
return结果为nums得三个位置之和。
https://leetcode.cn/problems/3sum-closest/
bool compareFirst(const std::tuple<int, int>& tuple1, const std::tuple<int, int>& tuple2) { return std::get<0>(tuple1) <= std::get<0>(tuple2);} class Solution { public: int threeSumClosest(vector<int>& nums, int target) { int nsize=nums.size(); vector<int>absnums; absnums.resize(nsize); for(int i=0;i<nsize;++i) { int tmpabs=abs(nums[i]-target); absnums[i]=tmpabs; } std::vector<std::tuple<int, int>> tuples(absnums.size()); std::transform(absnums.begin(), absnums.end(), tuples.begin(), [n = 0](int value) mutable { return std::make_tuple(value, n++); }); std::sort(tuples.begin(), tuples.end(), compareFirst); int one = std::get<1>(tuples[0]); int two = std::get<1>(tuples[1]); int three = std::get<1>(tuples[2]); int result=nums[one]+nums[two]+nums[three]; return result; } };