题目如下:
给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形?
样例
例如,给定数组 S = {3,4,6,7}
,返回 3
其中我们可以找到的三个三角形为:
{3,4,6}
{3,6,7}
{4,6,7}
读了一遍题目的后的思路:
先确定两条边,根据第三条边不大于两边只和 且 不小于两边只差的原理 搜索第三条边
最短边 i=0;i<S.count-1;i++
最长边 j=i+2;j<S.count;j++
第三条边考虑到时间问题 使用二分法查找
int triangleCount(vector<int> &S) {
// write your code here
int sum = 0;
int n = S.size();
sort(S.begin(), S.end());
for(int i=0;i<n;i++)
{
for(int j=i+2;j<n;j++)
{
int st=i+1;
int end=j;
//二分法查找中间边 0 i+2 i i+3
while(st<end)
{
int mid=(st+end)/2;
if(S[mid]>(S[j]-S[i]))
end=mid;
else
{
st++;
}
}
sum+=(j-st);
}
}
return sum;
}