首页 > 其他分享 >LeetCode 611. 有效三角形的个数

LeetCode 611. 有效三角形的个数

时间:2023-10-28 10:06:34浏览次数:41  
标签:right nums int 611 个数 result 三角形 LeetCode left


有效三角形的个数

题目链接 611. 有效三角形的个数

给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

示例 1:

输入: nums = [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3

示例 2:

输入: nums = [4,2,3,4] 输出: 4

题目解释

从数组中跳出三个元素,判断他是否可以组成三角形.

算法原理

我们知道三个数是否可以组成三角形的条件是任意两条边的和大于第三边,实际上只需让较小的两条边之和大于第三边即可.那么这个时候我们是否可以做.

  • 将我们的数组排序
  • 固定一个最大的值,然后遍历其他的,判断是否可以组成三角形

下面说我们一次遍历的流程,使用碰撞双指针.

  • left = 0, right = i-1
  • 如果他们的和小于固定的值, left++
  • 如果他们的和大于固定的值, 收集结果,然后right–,看看后面还有没有结果

细节补充

这里还是两个细节

  • 我们需要保证我们的每一次的遍历的元素至少是3个
  • left是要小于right的

代码编写

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


标签:right,nums,int,611,个数,result,三角形,LeetCode,left
From: https://blog.51cto.com/byte/8065005

相关文章

  • Leetcode 283. 移动零
    移动零题目链接283.移动零给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。请注意,必须在不复制数组的情况下原地对数组进行操作。示例1:输入:nums=[0,1,0,3,12]输出:[1,3,12,0,0]示例2:输入:nums=[0]输出:[0]题目解释这道题目......
  • LeetCode 2: Add Two Numbers
    https://leetcode.cn/problems/add-two-numbers/description/FinallyIjoinedaforeigncompany'sChinabranchtolearnEnglishandstartanewjourney.PS:FromnowformeseemsMoreleisurely,elegant,high-tech,andalittlewise(inleadership)compa......
  • [Leetcode] 0104. 二叉树的最大深度
    104.二叉树的最大深度题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7],3/\920/\157返回它的最大深度 3。......
  • #yyds干货盘点# LeetCode程序员面试金典:生命游戏
    题目根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。给定一个包含m×n个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1即为活细胞(live),或0即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂......
  • #yyds干货盘点# LeetCode程序员面试金典:最小操作次数使数组元素相等 II
    题目给你一个长度为n的整数数组nums,返回使所有数组元素相等需要的最小操作数。在一次操作中,你可以使数组中的一个元素加1或者减1。 示例1:输入:nums=[1,2,3]输出:2解释:只需要两次操作(每次操作指南使一个元素加1或减1):[1,2,3] => [2,2,3] => [2,2,2]示......
  • leetcode98-验证二叉搜索树
    一开始没有考虑到左子树的所有节点都要小于根节点,右子树要大于根节点,本质上是边界没有考虑仔细,所以比较时需向上比较(和父节点)而不是向下比较(和子节点比大小)根节点没有父节点,因此初始化时引用最大最小值即可,注意这里的数值范围点击查看代码classSolution{publicboolean......
  • [11章]技术大牛成长课,从0到1带你手写一个数据库系统
    点击下载——[11章]技术大牛成长课,从0到1带你手写一个数据库系统 提取码:y31p 这是一套一步步带着大家从0开始写一个数据库系统的视频教程,2023最新录制,提供有配套的源码资料下载!无论你是数据库内核研发、DBA、还是后端研发,能够手写一套自己的数据库系统,都是你突破技术发展瓶颈的......
  • 用C语言,两个数的最大公约数
    今天我们来了解下如何用C语言程序代码,求两个数的最大公约数。比较经典的算法就是使用辗转相除法,代码如下:程序运行结果如下:#include<stdio.h>intmain(){ intm=0;       //创建整型(int)的变量m,n来接收从键盘输入的值 intn=0; intr=0;     /......
  • Java 求两个数的最大公约数和最小公倍数(理解原理 > 背诵)
    解题需知原理,背诵来的知识只能支撑一时。为什么反复执行a%b,即可得到最大公约数?(设定前提是a>b)其中的数学原理就是:a和b的最大公约数完全等同于 b和a%b的最大公约数,证明在这里:辗转相除法求解最大公约数和最小公倍数的数学原理-知乎求得最大公约数d以后,比方说:a=x*......
  • [Leetcode] 0101. 对称二叉树
    101.对称二叉树题目描述给你一个二叉树的根节点root,检查它是否轴对称。 示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false 提示:树中节点数目在范围[1,1000]内-100<=Node.val<=100 进阶:你可以运用递......