//因为疏忽经常得不到[0,0,0]的结果...
//这题时间卡得很紧,第三个数需要二分查找
//第一第二个数枚举,查找第三个数
//两个for循环里面第一行命令就是要排除数字重复出现然后res里面会重复出现结果的情况
class Solution {
public:vector<vector<int> > threeSum(vector<int> &num) {
sort(num.begin(),num.end());
vector<vector<int>> result;
vector<int>temp;
int n=num.size();
int i,j,k;
for(i=0;i<n-2;i++){
if (i > 0 && num[i] == num[i - 1])continue;
for(j=i+1;j<n-1;j++){
if (j-1 > i && num[j] == num[j - 1])continue;
//for(k=j+1;k<n;k++)
int t=0-num[i]-num[j];
int l=j+1;int r=n-1;
int mid;
while(l<=r)
{
mid=(l+r)/2;
if(num[mid]==t)
{
temp.push_back(num[i]);
temp.push_back(num[j]);
temp.push_back(num[mid]);
result.push_back(temp);
temp.clear();
break;
}
else if(num[mid]>t)r=mid-1;
else l=mid+1;
}
}}
return result;
}
};