三数之和c++完整代码
时间: 2024-10-19 13:09:12 浏览: 31
三数之和的问题是在给定的一组整数中找到三个数,使得它们的和等于零。这是一个经典的问题,可以用哈希表或排序的方法来解决。下面是一个简单的C++代码示例,使用了排序方法:
```cpp
#include <iostream>
#include <vector>
using namespace std;
bool threeSum(vector<int>& nums, int target) {
if (nums.size() < 3) return false; // 如果数组元素少于3个,不可能存在解
sort(nums.begin(), nums.end()); // 先对数组进行排序
for (size_t i = 0; i < nums.size() - 2; ++i) { // 遍历数组直到倒数第三个元素
if (i > 0 && nums[i] == nums[i - 1]) continue; // 跳过重复元素,避免重复计算
size_t j = i + 1, k = nums.size() - 1; // 定义两个指针j和k
while (j < k) { // 使用双指针法
int sum = nums[i] + nums[j] + nums[k];
if (sum < target) j++; // 和小于目标,左移j
else if (sum > target) k--; // 和大于目标,右移k
else { // 找到和等于目标的情况
cout << "Three numbers found: " << nums[i] << ", " << nums[j] << ", " << nums[k] << endl;
j++; k--;
while (j < k && nums[j] == nums[j - 1]) j++; // 再次检查防止重复
}
}
}
return false; // 返回是否找到三数之和
}
int main() {
vector<int> nums = {-1, 0, 1, 2, -1, -4};
int target = 0;
if (threeSum(nums, target)) {
cout << "Solutions exist!" << endl;
} else {
cout << "No solutions." << endl;
}
return 0;
}
```
阅读全文