zoukankan      html  css  js  c++  java
  • 有效三角形的个数

    给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。

    输入: [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的都可以组成三角形。这和前面的求小于K的两数之后的原理是一样的。

    1 对数组进行排序,这个时候从右边选定c,也就是最长的一条边。

    2 然后对c之前的数组求两数之和。大于c的则满足条件。

    代码如下:

    int triangleCount(int a[], int len)
    
    {
    
        int left, right, anchor;
    
        int count = 0;
    
        insert_sort(a, len);
    
        for (int i = len - 1; i >= 2; i--)
    
        {
    
            //left从左边开始,right从i之前的最右边开始
    
            left = 0;
    
            right = i - 1;
    
            while (left < right)
    
            {
    
                 if (a[left] + a[right] > a[i])
    
                 {
    
                     //如果满足条件,则表示从left到right之间的数字和right相加都满足大于c的条件。因为数组是递增的
    
                     count += right-left;
    
                     right--;
    
                 }
    
                 else
    
                 {
    
                     //不满足条件,则left+1 向前继续寻找
    
                     left += 1;
    
                 }
    
            }
    
        }
    
        return count;
    
     
    
    }
  • 相关阅读:
    判断整数是否为质数?
    汇编debug
    DOS命令 Net config server Net config workstation
    DecimalField的使用
    BiNGO的GO分析
    GO富集分析 信号通路
    Cytoscape软件简介
    git pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
    note3
    基因id
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/11683666.html
Copyright © 2011-2022 走看看