https://leetcode.com/problems/valid-triangle-number/description/
有点类似3Sum的题目。形成三角形的充要条件是最小两边之和大于第三边。可以先给数组排序,然后确定一个最大边,然后在它左边找另外两边。
时间复杂度是O(n*log(n) + n^2) = O(n^2)
class Solution { public: int triangleNumber(vector<int>& nums) { sort(nums.begin(), nums.end()); int count = 0; for (int i = nums.size() - 1; i >= 0; --i) { // two sum (x + y) > nums[i] int j = 0; int k = i - 1; while (j < k) { if (nums[j] + nums[k] <= nums[i]) { j++; continue; } count += (k - j); k--; } } return count; } };