当前位置: 首页 > article >正文

611.有效三角形的个数

题目

链接:leetcode链接
在这里插入图片描述

思路分析(双指针)

如何构成一个三角形呢?
只需要两边之和大于第三边;
但是,如果已知三条边的大小关系,只需要两条较小边的和大于第三条边即可。

所以,我们需要首先进行排序来获取不同边的大小关系。

我们如何寻找两条较小边和一条大边呢?
不妨先固定一条大边,移动两条小边。
寻找两条小边就需要使用双指针算法。(不妨设大边为target)
设置left和right两个指针,left指向左边,right指向距离大边最近的一条边,依次向中间汇合,进行调整,即可得到答案。

在调整的过程中会遇到两种情况

(1) left + right > target
则,所有left右边的边都可以和right和target构成三角形,
个数位right - left。
right–继续寻找该target下的有效三角形
(2)left + right <= target
则,所有right左边的边都不能喝left和target构成三角形
left++继续寻找该target下的有效三角形。
在这里插入图片描述

寻找完所有的大边求和即可。

代码

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

        return ret;
    }
};

http://www.kler.cn/a/289112.html

相关文章:

  • 专题十八_动态规划_斐波那契数列模型_路径问题_算法专题详细总结
  • 【数据结构与算法】第12课—数据结构之归并排序
  • 申论1_概括、分析
  • Vue 的生命周期函数 和 Vuex
  • 若依笔记(八):芋道的Docker容器化部署
  • 代码 RNN原理及手写复现
  • 豆包MarsCode编程助手:让编程更简单
  • 七、场景加载
  • git中的分支是什么?分支有哪些好处?如何建立分支?
  • PyTorch Geometric(torch_geometric)简介
  • 行业首家!百度智能云通过中国信通院「H5 端人脸识别安全能力」测评
  • DORIS - DORIS注意事项(一)
  • C++:类的定义、实例化
  • Explorer++:轻量级高效文件管理器!!
  • 论文阅读:MicroNet: Towards Image Recognition with Extremely Low FLOPs
  • Linux命令 :更改文件或目录的组所有权的命令chgrp详解
  • FlyMcu和STLINK Utility使用
  • 【ORACLE】listagg() 函数
  • linux进程处理
  • Java 输入与输出之 NIO.2【AIO】【Path、Paths、Files】【walkFileTree接口】探索之【三】
  • Qt详解QParallelAnimationGroup并行动画组
  • 【2024 CCF编程能力等级认证(GESP)C++ 】 计算机基础知识
  • 三、 3020数控铣床 笔记
  • 中国科学院声学研究所博士招生目录
  • 昇思25天学习打卡营第33天|共赴算力时代
  • 双指针(1)_数组分块_移动零问题