题目大意
解题思路
首先明确什么条件一定能组成三角形?
- a + b > c (c为最长边)
Code
class Solution {public:int triangleNumber(vector<int>& nums) {int ans = 0;if (nums.size() < 3) return ans;sort(nums.begin(), nums.end());for (int i=0;i<nums.size()-2;i++) {for (int j=i+1;j<nums.size()-1;j++) {int l = j+1, r = nums.size()-1, k = j; // k = j 假如二分没有找到符合的k,j-j也不影响。while (l <= r) {int mid = (l+r)/2;if (nums[mid] < nums[i] + nums[j]) {k = mid;l = mid + 1;}else {r = mid - 1;}}ans += k - j;}}return ans;}};
法二
class Solution {public:int triangleNumber(vector<int>& nums) {int ans = 0;if (nums.size() < 3) return ans;sort(nums.begin(), nums.end());for (int i=0;i<nums.size()-2;i++) {int k = i;for (int j=i+1;j<nums.size()-1;j++) {while(k+1<nums.size() && nums[i] + nums[j] > nums[k+1]) {k++;}ans += max(k-j, 0);}}return ans;}};
