zoukankan      html  css  js  c++  java
  • 双指针——三角形计数,就是一些细节处理要严谨,否则还是容易出错

    382. 三角形计数

    中文
    English

    给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形?

    样例

    样例 1:

    输入: [3, 4, 6, 7]
    输出: 3
    解释:
    可以组成的是 (3, 4, 6), 
               (3, 6, 7),
               (4, 6, 7)
    

    样例 2:

    输入: [4, 4, 4, 4]
    输出: 4
    解释:
    任何三个数都可以构成三角形
    所以答案为 C(3, 4) = 4

    class Solution:
        """
        @param S: A list of integers
        @return: An integer
        """
        def triangleCount(self, S):
            # write your code here
            # a+b > c
            # ==> a+b-c > 0
            # c=10 [3, 4, 6, 7] ==> l += 1
            # c=11 [3, 4, 6, 7] ==> l += 1
            # c=9 [3, 4, 6, 7] ==> r -= 1, ans += (r-1)
            
            def find_count(arr, k, c):
                l, r = 0, k
                ans = 0
                while l < r:
                    if arr[l] + arr[r] <= c:
                        l += 1
                    else:
                        ans += (r - l)
                        r -= 1
                return ans
            
            S.sort()
            ans = 0
            for i in range(len(S)-1, -1, -1):
                ans += find_count(S, i-1, S[i])
            return ans
    
  • 相关阅读:
    双循环解决添加列表问题
    贪心算法
    隔板法发红包
    python小兵之时间模块
    开发规范
    python 小兵(12)模块1
    Linux系统
    刷题
    Socket
    栈和队列
  • 原文地址:https://www.cnblogs.com/bonelee/p/14265107.html
Copyright © 2011-2022 走看看