美文网首页
三角形计数

三角形计数

作者: 赵仝 | 来源:发表于2017-05-23 19:43 被阅读0次

最近,在做lintcode 上的题目,有一些题还是很有意思的。这个属于中等难度的三角形计数。
题目:

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

首先,我们能想到的解法肯定是,将所有数组合,然后判断。
代码如下:

public class Solution {
    /**
     * @param S: A list of integers
     * @return: An integer
     */
    public int triangleCount(int S[]) {
        int result = 0;
        for (int i = 0; i < S.length - 2; i++) {
            for (int j = i + 1; j < S.length - 1; j++) {
                for (int k = j + 1; k < S.length; k++) {
                    if (trigangleJudge(S[i], S[j], S[k])) {
                        result++;
                    }
                }
            }
        }
        return result;
    }
    public  boolean trigangleJudge(int a, int b, int c) {
        if (a + b > c && a + c > b && b + c > a) {
            return true;
        } else {
            return false;
        }
    }
   
}

但是永远没有最好的解决办法,所以我在网上一直想找一个更好的方法,此时看到一篇博客。其思想是,我们先找两条边,然后利用二分查找第三条边。这位前辈是用Python写的,这里我用java。很佩服他的思路。放到这里供大家借鉴思考
代码如下:

public class Solution {
    /**
     * @param S: A list of integers
     * @return: An integer
     */
    public int triangleCount(int S[]) {
     int result = 0;
        Arrays.sort(S);
        for (int i = 0; i < S.length; i++) {
            for (int j = i + 1; j < S.length; j++) {
                int l = i + 1;
                int r = j;
                int target = S[j] - S[i];
                while (l < r) {
                    int mid = (l + r) / 2;
                    if (S[mid] > target) {
                        r = mid;
                    } else {
                        l = mid + 1;
                    }

                }
                result += (j - l);
            }
        }
        return result;
    }

   
}

两份解决方案的测试结果如下:

第一种.png 第二种.png

相关文章

  • 三角形计数

    最近,在做lintcode 上的题目,有一些题还是很有意思的。这个属于中等难度的三角形计数。题目: 给定一个整数数...

  • 直观理解:图算法之Triangle Count和Clusteri

    定义   Triangle Count(三角形计数)用来确定图中每个节点的跟其1-hop的点直接能够形成三角的个数...

  • 几何计数公式,数正方形、长方形、三角形

    欢迎关注视频号、公众号:沈阳奥数 几何计数小学阶段主要是数正方形、长方形、三角形。有许多公式和技巧,今天主要介绍一...

  • CSS 画三角形

    正三角形 倒正三角形 正左三角形 正右三角形 直角左上三角形 直角右上三角形 直角左下三角形 直角右下三角形

  • 《三角形分类》教学设计

    学习目标: A类目标:通过三角形分类活动,认识直角三角形、锐角三角形、钝角三角形、等腰三角形和等边三角形。 ...

  • 计数

    300+3小时*60*60+

  • 计数

    字典

  • 第一二章

    第1章 一次自评价测试 问题:指出三角形是何种三角形 问题分析:三角形包含等腰三角形、等边三角形、不规则三角形 测...

  • Objective-C高级编程读书笔记

    自动引用计数 ARC 自动引用计数 ARC :是指内存管理中对引用计数采取自动计数的计数。 苹果文档 ARC 是让...

  • 用div+css制作三角形

    直角三角形为例: 右上角的三角形: 左上角的三角形 左下角的三角形 右下角的三角形

网友评论

      本文标题:三角形计数

      本文链接:https://www.haomeiwen.com/subject/zqpgxxtx.html