双指针刷题(三)

所有算法文章链接(最底部)

http://t.csdnimg.cn/IbllR

1.有效三角形个数

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

1.分析题意

给一个非负的数组,判断这个数组能组成多少个三角形。

2.解题思路

补充知识:已知三边a,b,c,三边大小依次递增,判断是否能构成三角形,仅需判断a+b>c,判断一次即可。

1.为了减少判断三角形的次数,将数组按升序排序。

2.固定最大的数

3.在最大的数左边的区间内采用双指针算法,统计三角形的个数。

4.只需判断left + right 是否大于 i,

如果left+right 大于i,说明在[left,right]这个区间内所有的元素都可以构成right-left个三角形,right--。

如果left+right小于等于i,说明[left,right]区间内不是所有的元素都可以构成三角形,left++,直到区间内所有元素都可以构成三角形。

5.最后在把最大元素定为9,继续重复以上过程。

代码编写

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

        }
        return sum;
    }
};
相关推荐
Xの哲學几秒前
Linux自旋锁深度解析: 从设计思想到实战应用
linux·服务器·网络·数据结构·算法
晚风吹长发4 分钟前
深入理解Linux中用户缓冲区,文件系统及inode
linux·运维·算法·链接·缓冲区·inode
cwplh13 分钟前
DP 优化一:单调队列优化 DP
算法
Halo_tjn14 分钟前
基于Java的相关知识点
java·开发语言·windows·python·算法
CoovallyAIHub18 分钟前
英伟达CES 2026炸场:没有新显卡,却掏出了让全球AI公司彻夜难眠的“算力核弹”
深度学习·算法·计算机视觉
wregjru39 分钟前
【C++】2.9异常处理
开发语言·c++·算法
CoovallyAIHub39 分钟前
如何用10%的标注数据,达到可媲美全监督模型的性能?AAAI 2026论文揭秘BCSI三大创新设计
深度学习·算法·计算机视觉
肆悟先生1 小时前
3.18 constexpr函数
开发语言·c++·算法
别在内卷了1 小时前
三步搞定:双指针归并法求两个有序数组的中位数(Java 实现)
java·开发语言·学习·算法
范纹杉想快点毕业1 小时前
C语言100个经典编程练习题(完整标题+清晰排版)
运维·c语言·单片机·嵌入式硬件·算法