这个题目,是看别人保研的时候提到的。
自己想了一下,暴力的话,emmm,肯定过不了。
于是找了一下这个题目,真的很精巧,设计上。
先排序,然后,也没用二分-。-,复杂度直接降低了一个n
代码:看思路
int triangleCount(vector<int> &S) {
// write your code here
int iSize = S.size();
if (iSize <= 2)
{
return 0;
}
int sum = 0;
sort(S.begin(), S.end());
for (int i = 2; i < iSize; i++)
{
int posLeft = 0;
int posRight = i - 1;
int c = S.at(i);
while (posLeft < posRight)
{
if (S.at(posLeft) + S.at(posRight) <= c)
posLeft++;
else if (S.at(posLeft) + S.at(posRight) > c)
{
sum += posRight - posLeft;
posRight--;
}
}
}
return sum;
}