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

LeetCode 611. 有效三角形的个数

时间:2023-10-24 21:32:12浏览次数:34  
标签:right nums int 611 个数 -- 三角形 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,个数,--,三角形,LeetCode,left
From: https://blog.51cto.com/byte/8010231

相关文章

  • [Leetcode] 0100. 相同的树
    100.相同的树题目描述给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例1:输入:p=[1,2,3],q=[1,2,3]输出:true示例2:输入:p=[1,2],q=[1,null,2]输出:false示例3:......
  • C++数位算法:数字1的个数
    题目给定一个整数n,计算所有小于等于n的非负整数中数字1出现的个数。示例1:输入:n=13输出:6示例2:输入:n=0输出:0提示:0<=n<=1092023年1月版classSolution{public:intcountDigitOne(intn){intiNum=0;intiMul=1;for(inti=0;i<9;i++){......
  • LeetCode Day13 239&347
    //利用双端队列手动实现单调队列/***用一个单调队列来存储对应的下标,每当窗口滑动的时候,直接取队列的头部指针对应的值放入结果集即可*单调队列类似(tail-->)3-->2-->1-->0(-->head)(右边为头结点,元素存的是下标)*/239. 滑动窗口最大值classSolution{......
  • LeetCode 454.四数相加 II
    题目描述给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i,j,k,l)能满足:0<=i,j,k,l<nnums1[i]+nums2[j]+nums3[k]+nums4[l]==0描述第一次提交的代码importjava.util.Map;importjava.util.HashMap;classSol......
  • [Leetcode Weekly Contest]368
    链接:LeetCode[Leetcode]2908.元素和最小的山形三元组I给你一个下标从0开始的整数数组nums。如果下标三元组(i,j,k)满足下述全部条件,则认为它是一个山形三元组:i<j<knums[i]<nums[j]且nums[k]<nums[j]请你找出nums中元素和最小的山形三元组,并返回......
  • 【LeetCode】LCP 06.拿硬币
    描述桌上有n堆力扣币,每堆的数量保存在数组coins中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。示例输入:[4,2,1]输出:4解释:第一堆力扣币最少需要拿2次,第二堆最少需要拿1次,第三堆最少需要拿1次,总共4次即可拿完。限制1<=n<=41<=co......
  • LeetCode | 19. 删除链表的倒数第 N 个结点
    1相关标签链表、双指针、C语言2报错情况2.1题目给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。2.2错误代码/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNo......
  • LeetCode 1.两数之和
    题目描述给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例第一次提交的代码i......
  • [Leetcode] 0088. 合并两个有序数组
    88.合并两个有序数组题目描述给你两个按非递减顺序排列的整数数组 nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1......
  • [Leetcode] 0824. 山羊拉丁文
    824.山羊拉丁文题目描述给你一个由若干单词组成的句子 sentence,单词间由空格分隔。每个单词仅由大写和小写英文字母组成。请你将句子转换为“山羊拉丁文(GoatLatin)”(一种类似于猪拉丁文 -PigLatin的虚构语言)。山羊拉丁文的规则如下:如果单词以元音开头('a','e','i',......