双指针刷题(三)

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

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;
    }
};
相关推荐
是main不是漫20 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
深圳市快瞳科技有限公司21 小时前
野外鸟类AI识别落地实录:输入适配、结构化输出、去重聚合与置信度分流的工程实践
算法·计算机视觉·鸟类识别·鸟类ai识别·野外鸟类观测·林业调查
专注仿真1 天前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
小豆庄1 天前
视频遮罩追踪退场后ID撞号的排查—多目标场景下的失效
opencv·算法·bug·视频·python3.11
Tisfy1 天前
LeetCode 3882.网格图中最小异或路径:动态规划
算法·leetcode·动态规划
D e re k ZH1 天前
P5025 [SNOI2017] 炸弹
c++·算法
A boy CDEF girl1 天前
算法题专栏:优选算法
数据结构·算法·leetcode
没落之王1 天前
三易五行看宋朝的三界确立
大数据·人工智能·算法
坤坤子吖1 天前
算法学习——单调队列
开发语言·c++·笔记·学习·算法
Js.Tx1 天前
【具体数学 Concrete Mathematics】2.1.5 一般性的方法
算法·具体数学