每日一题:Leetcode-611 有效三角形的个数

力扣题目

解题思路

java代码

力扣题目:

给定一个包含非负整数的数组 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

解题思路:

算法原理
这道题通过遍历数组的所有三元组组合,判断是否满足三角形的条件(任意两边之和大于第三边)来计算符合条件的三角形数量。

思路
使用三层循环遍历数组,对于每一个三元组 (nums[i], nums[j], nums[k]) ,其中 i < j < k ,检查是否满足 nums[i] + nums[j] > nums[k] ,如果满足则计数器加 1 。

代码分析

  • 外层循环控制第一个元素的索引 i 。
  • 中层循环控制第二个元素的索引 j ,从 i + 1 开始,确保 j > i 。
  • 内层循环控制第三个元素的索引 k ,从 j + 1 开始,确保 k > j 。

时间复杂度 ,其中 n 是数组的长度,因为有三层嵌套的循环,每个循环的长度都与数组长度有关。

空间复杂度: ,只使用了固定的几个变量来进行计算和计数,空间开销恒定。

java代码:

package com.example.lib;

public class Leetcode611 {
    public static void main(String[] args) {
        Leetcode611 leetcode611 = new Leetcode611();
        int[] nums = {2,2,3,4};
        System.out.println(leetcode611.triangleNumber(nums));
    }
    public int triangleNumber(int[] nums) {
        int n = nums.length;
        int ans = 0;
        for(int i = 0; i < n; i++)
        {
            for(int j = i+1; j < n; j++)
            {
                for(int k = j+1; k < n; k++)
                {
                    if(nums[i] + nums[j] > nums[k])
                        ans++;
                }
           }
        }
        return ans;
    }
}

更多详细内容同步到公众号,感谢大家的支持!

每天都会给刷算法的小伙伴推送明日一题,并且没有任何收费项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L.2626

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值