操作1:排序
操作2:固定最大的那条边,设置变量c
操作3:a指向索引0,b指向c前面一个数
代码
class Solution {
public:
int triangleNumber(vector<int>& nums)
{
sort(nums.begin(), nums.end());//排序升序 logN * N
int ret = 0;//返回值
//利用三角形,两个最小的边相加大于第三条边,这个是最简单的判断
//a + b > c
//这里用的是下标
int c = nums.size() - 1;
int a = 0;
int b = c - 1;
if(c == 0)
b = 0;
while(a != b)//初始条件 a==b时,所有循环结束
{
while(a != b)//一个c循环结束
{
if(nums[a] + nums[b] > nums[c])
{
ret += b - a;
b--;
}
else if(nums[a] + nums[b] <= nums[c])
{
a++;
}
}
c--;
a = 0;
b = c - 1;
}
return ret;
}
};