15. 三数之和c++
时间: 2025-03-06 15:38:51 浏览: 24
C++ 实现三数之和问题
对于寻找数组中三个数相加等于零的问题,可以采用双指针方法来优化暴力求解的时间复杂度。具体来说,在遍历过程中固定一个数值作为目标值的相反数,然后利用两个指针对剩余部分进行扫描。
排序与去重
首先对输入数组 nums
进行升序排列以便后续操作,并去除重复元素以减少不必要的计算量:
std::sort(nums.begin(), nums.end());
auto last = std::unique(nums.begin(), nums.end());
nums.erase(last, nums.end());
双指针查找组合
接着定义外层循环用于选取当前考察的目标值;内嵌两层循环分别指向待查区间的两端,逐步向中间靠拢直至找到满足条件的一组解或将要交错为止:
for (int i = 0; i < nums.size(); ++i) {
int target = -nums[i];
int start = i + 1;
int end = nums.size() - 1;
while (start < end) {
if (nums[start] + nums[end] == target) {
result.push_back({nums[i], nums[start], nums[end]});
// 跳过相同元素防止重复记录
while (start < end && nums[start] == nums[++start]);
while (start < end && nums[end] == nums[--end]);
} else if (nums[start] + nums[end] < target) {
++start;
} else {
--end;
}
}
// 避免再次选到相同的起始点
while (i + 1 < nums.size() && nums[i + 1] == nums[i]) ++i;
}
此段代码实现了高效的三数之和查询功能[^1]。为了保证结果集中不含冗余项,在每次成功匹配后均需跳过连续出现的相同数字序列。
相关推荐

















