题目描述:
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0?找出所有满足条件且不重复的三元组。
题目解析:
- 暴力破解,三层循环扫数组 时间复杂度O(n^3)
- 双指针法:O(n^2)
void ThreeSum(int *arr,int length,int *result,int target)
{
//如果数组无序,先进行排序,sort,这里假设该数组已经有序
//假设arr[a] + arr[b] + arr[c] == target
for(int a = 0;a < length;++a)
{
//arr[a]之后的数组部分,即arr[b]---> arr[c],利用双指针在这个区间找两个数进行扫描
//随着a增大,b--c之间的数组也在逐渐缩小
int b = a+1;
int c = length -1;//每次指向数组最后部分
while(b < c)
{
if(arr[a]+arr[b]+arr[c] == target)
{
result[0] = a;
result[1] = b;
result[2] = c;
return;
}
else if(arr[a]+arr[b]+arr[c] < target)
{
b++;
}
else
{
c--;
}
}
}
}