前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >有效三角形的个数

有效三角形的个数

作者头像
用户11162265
发布2025-03-28 10:40:21
发布2025-03-28 10:40:21
2600
代码可运行
举报
文章被收录于专栏:C语言C语言
运行总次数:0
代码可运行

题目链接:611. 有效三角形的个数 - 力扣(LeetCode)

思路:

这道题要根据数组中的元素来判断能组成三角形的个数,

三边a、b、c要满足a+b>c,a+c>b,b+c>a这三个条件才能构成三角形。

当c>a,c>b时,我们只需要判断一个条件a+b>c是否满足就可以了,满足就能构成一个三角形。

所有我们可以先对数组进行排序

我们先选定最大的数作为c,让left=0,right在c的位置-1,

如果arr[left]+arr[right] > c,那么left和right中间这些>=left指向的数的元素和righ指向的数相加一定也是>c的,因此这些数和arr[right]、c一定能构成三角形。

然后left应该向左移动,再去判断移动后的arr[left]+arr[right]和c的关系。

如果arr[left]+arr[right] < c,那就把left向右移动,然后再去判断。

直到left和right相遇,我们就把所有c作为做大的数的所有情况判断完了,再把c左移,然后重复上面的情况。

因为要构成一个三角形,数组中至少要有3个数,所有c的位置做多只能到数组下标为2的位置。

代码:

代码语言:javascript
代码运行次数:0
运行
复制
public int triangleNumber(int[] nums) {
        //排序
        Arrays.sort(nums);
        int result = 0;
        for(int i = nums.length - 1; i >= 2; i--) //固定最大数
        {
           int left = 0, right = i - 1;
           while(left < right){
            if(nums[left] + nums[right]>nums[i]){
                result += right - left;
                right--;
            }else{
                left++;
            }

           }
        }
        return result;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档