力扣题目
解题思路
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;
}
}
更多详细内容同步到公众号,感谢大家的支持!
每天都会给刷算法的小伙伴推送明日一题,并且没有任何收费项