0
点赞
收藏
分享

微信扫一扫

leetcode611. 有效三角形的个数

IT影子 2022-03-30 阅读 37
python
   def triangleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        res = 0
        nums.sort()
        for i in range(len(nums)-1,-1,-1):  #先取最大的数
            l,r = 0,i-1 #  最小的数和第二大的数
            while l < r:#  l=r时说明找完了
                if nums[i] < nums[l] + nums[r]: #最小的加上第二大的比最大的大,
                    res += r-l								 #那么最小的数之后到第二大的数之间所有数都满足要求
                    r -= 1									#找完第二大的数对应的结果,继续找第三大的数
                else:
                    l += 1									#最小的加上第二大的数小于等于最大的数,所以后移直到满足三角形条件
        return res
def triangleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        res = 0
        nums.sort()
        for i in range(len(nums)):
            for j in range(i+1,len(nums)):   #首先让i,j是最小的两个边
                l,r = j+1,len(nums)-1
                while l <= r:                #之后根据二分模板让r成为满足答案的最大的数,这里用到了模板等于时r=m-1,所以while也用等号让r出界成为满足答案的最大的数
                    m = l + (r-l)//2
                    if nums[m] >= nums[i] + nums[j]:
                        r = m - 1
                    else:
                        l = m + 1
                res += r - j
        return res
举报

相关推荐

0 条评论