题目出处:611. 有效三角形的个数 - 力扣(LeetCode)
思想:利用两条最小的边大于第三条边即为三角形这条定理,利用对撞指针来过滤不合理的
操作1:排序
操作2:固定最大的那条边,设置变量c
操作3:a指向索引0,b指向c前面一个数
代码
class Solution {
public:int triangleNumber(vector<int>& nums) {sort(nums.begin(), nums.end());//排序升序 logN * Nint 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;}
};