LeetCode 611.有效三角形的个数
思路🧐:
有效三角形的判断方法为两边之和大于第三边,所以我们可以先对该数组进行有序排列,固定一个最大值,再对其进行判断。
假如我们以升序排列,那么先将4固定住,左指针在第一个数,右指针在最大值的前一位,那么我们首先判断左右指针相加情况,此时大于4,而该数组有序排列,所以可以得出left往右所有数都大于等于left,可以用right-left统计该区间所有有效组合,最后right–继续判断。
当right走到2时,left+right<4,则right往左所有数都小于等于right,则该区间没有有效组合,可以直接left++,不再关注right往左的情况。
代码🔎:
class Solution { public: int triangleNumber(vector<int>& nums) { int n = nums.size(); int count = 0; sort(nums.begin(), nums.end()); for (int i = n - 1; i >= 0; i--) { int left = 0; int right = i - 1; //固定值的前一个 while (left < right) { if (nums[left] + nums[right] > nums[i]) { count += right - left; //统计个数 right--; } else { left++; //left+right<=固定值,直接left++ } } } return count; } };
时间复杂度:O(N2) 空间复杂度:O(1)