leecode611&976.有效三角形的个数(双指针法)&三角形的最大周长

一、有效三角形的个数 题目描述:

给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。

输入:

[2,2,3,4]

输出:

3
有效的组合是:
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3

算法思路:双指针法

https://leetcode-cn.com/problems/valid-triangle-number/solution/ming-que-tiao-jian-jin-xing-qiu-jie-by-jerring/

首先对数组进行排序。
固定最长的一条边,运用双指针扫描。
(1) 如果 nums[left] + nums[right] > nums[i],同时说明 nums[left + 1] + nums[right] > nums[i], …, nums[right - 1] + nums[right] > nums[i],满足的条件的有 right - left 种,right 左移。
(2) 如果 nums[left] + nums[right] <= nums[i],说明两边之和小了,让更小的一条边扩大,left 右移。
(1)(2)扫描结束,以最后一条边为长边的三角形个数以数出,–i,固定次长边。

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

二、有效三角形的个数 题目描述:

给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回 0。

输入1:

[2,1,2]

输出2:

5

输入1:

[1,2,1]

输出2:

0

算法思路:

首先数组排序,尽可能找到大的三条边,从最后一个元素开始遍历,满足三角形条件则输出。

class Solution {
public:
    int largestPerimeter(vector<int>& A) {
		int n=A.size();
		sort(A.begin(),A.end());
		int maxsize=0;
		for(int i=n-1;i>=2;--i)
		{
			if(A[i-1]+A[i-2]>A[i])
			{
				maxsize=A[i-2]+A[i-1]+A[i];
				break;
			}
		}
		return maxsize;      
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值