(1) 三角形 两个小边的和大于第三边;
(2) 数组sort之后,最大边设置成最大,次大边选择最大-1,最小边可以选择的种类。
int triangleNumber(vector<int>& nums) {
if (nums.size() == 0 || nums.size() < 3) {
return 0;
}
sort(nums.begin(),nums.end());
int cnt = 0;
for (int i = nums.size() - 1; i >= 2; i--) {
int l = 0;
int r = i - 1;
while (l < r) {
if (nums[l] + nums[r] > nums[i]) {
cnt += r - l; //小边可以选择的个数为 r-1,此时大边长为 nums[i],nums[i-1]。
r--;
} else {
l++;
}
}
}
return cnt;
}