本文转载自微信公众号《三分钟学前端》,作者安姐。转载本文请联系三分钟学习前端公众号。给定一个包含非负整数的数组,您的任务是计算可以构成三角形三边的三元组的数量。示例1:输入:[2,2,3,4]输出:3解释:有效组合为:2,3,4(使用第一个2)2,3,4(使用第二个2)2,2,3注意:数组长度不超过1000,数组的整数范围是[0,1000]。解决方案:排序+双指针我们知道,三角形任意两条边之和大于第三条边,任意两条边之差小于第三条边。如果这三条边的长度从小到大依次为a、b、c,当且仅当a+b>c这三条边可以组成一个三角形。解题思路:先对数组进行排序,排序后固定最长边,用双指针法判断剩余边,用nums[nums.length-1]作为最长边nums[k](k=nums.length-1)以nums[i]为最短边,nums[nums.length-2]为第二个数nums[j](j=nums.length-2),判断nums[是i]+nums[j]大于nums[k],nums[i]+nums[j]>nums[k],那么:nums[i+1]+nums[j]>nums[k]nums[i+2]+nums[j]>nums[k]...nums[j-1]+nums[j]>nums[k]则可以组成三角形的三元组的个数加上j-i,j向前移动一个bit(j--),继续进入下一轮判断nums[i]+nums[j]<=nums[k],然后将l向后移动一位(nums为升序),继续判断代码实现:lettriangleNumber=function(nums){if(!nums||nums.length<3)return0letcount=0//排序nums.sort((a,b)=>a-b)for(letk=nums.length-1;k>1;k--){leti=0,j=k-1while(i
