LeetCode 611. 有效三角形的个数
  Po3hxeRubiSF 2023年11月02日 26 0


有效三角形的个数

题目链接 611. 有效三角形的个数

给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

示例 1:

输入: nums = [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3

示例 2:

输入: nums = [4,2,3,4] 输出: 4

题目解释

从数组中跳出三个元素,判断他是否可以组成三角形.

算法原理

我们知道三个数是否可以组成三角形的条件是任意两条边的和大于第三边,实际上只需让较小的两条边之和大于第三边即可.那么这个时候我们是否可以做.

  • 将我们的数组排序
  • 固定一个最大的值,然后遍历其他的,判断是否可以组成三角形

下面说我们一次遍历的流程,使用碰撞双指针.

  • left = 0, right = i-1
  • 如果他们的和小于固定的值, left++
  • 如果他们的和大于固定的值, 收集结果,然后right–,看看后面还有没有结果

细节补充

这里还是两个细节

  • 我们需要保证我们的每一次的遍历的元素至少是3个
  • left是要小于right的

代码编写

class Solution
{
public:
  int triangleNumber(vector<int> &nums)
  {
    sort(nums.begin(), nums.end());
    int i = nums.size() - 1;
    int result = 0;
    for (; i >= 2; --i)
    {
      int left = 0;
      int right = i - 1;
      while (left < right)
      {
        if (nums[left] + nums[right] > nums[i])
        {
          result += (right - left);
          right--;
        }
        else
        {
          left++;
        }
      }
    }
    return result;
  }
};


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
Po3hxeRubiSF