在做题中学习(40):有效三角形的个数
2023-12-24 01:37:52
思路:(双指针法)最优
确定一个三角形除了左边,
还可以右边的让数组排好序,让一个小的,一个次大 相加 和 最大的 比较,如果不满足,中间的数都可以直接不用比较,如果满足,那 次大 和 中间的数 全部都可以组成,直接计数就行。而这就分为了两种情况:
1.a+b>c? ? ? ? (right--)
2.a+b<=c? ? ? (left++)
两者相遇后,把最大数c--,再次重复上面操作。
class Solution
{
public:
int triangleNumber(vector<int>& nums)
{
int count = 0;
//1.先排序
sort(nums.begin(),nums.end());
//2.确定c
for(int i=nums.size()-1;i>=2;i--)
{
//在里面定义left和right是因为每次变,它们就得跟着变
int left = 0, c = i, right = i-1;
while(left<right)
{
if(nums[left]+nums[right]>nums[c])
{
count += right-left;
right--;
}
else
{
left++;
}
}
}
return count;
}
};
文章来源:https://blog.csdn.net/yiren_liusong/article/details/135167177
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!