赞
踩
给定一个包含非负整数的数组
nums
,返回其中可以组成三角形三条边的三元组个数。
利用已升序了的数组通过 a + b > c 这条公式找出符合要求的三元组,利用这个公式的前提是三条边为从小到大,再利用单调性快速统计出符合要求的三元组个数。
解题方法:
现在就可以开始寻找符合要求的三条边了。
两边之和有两种情况:
当区间内的所以情况判断完毕,即最大数的所有组合已统计完毕,再重新固定新的最大数,即上一个最大数的前一位数,再去统计符合要求的三元组个数。
- class Solution {
- public:
- int triangleNumber(vector<int>& nums)
- {
- // 1. 升序
- sort(nums.begin(), nums.end());
-
- // 2. 双指针
- int ret = 0, n = nums.size();
- for(int i = n-1; i >= 2; i--)// 固定最大的数,因为是三元组,从2开始
- {
- // 利用双指针统计出符合要求的三元组的个数
- int left = 0, right = i - 1;
- while (left < right)
- {
- if (nums[left]+nums[right] > nums[i])
- {
- ret += right - left;
- right--;
- }
- else
- {
- left++;
- }
- }
- }
- return ret;
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。