zoukankan      html  css  js  c++  java
  • lintcode-382-三角形计数

    382-三角形计数

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

    样例

    例如,给定数组 S = {3,4,6,7},返回 3
    其中我们可以找到的三个三角形为:
    {3,4,6}
    {3,6,7}
    {4,6,7}
    给定数组 S = {4,4,4,4}, 返回 4
    其中我们可以找到的三个三角形为:
    {4(1),4(2),4(3)}
    {4(1),4(2),4(4)}
    {4(1),4(3),4(4)}
    {4(2),4(3),4(4)}

    标签

    两根指针 LintCode 版权所有

    思路

    三角形两边之和大于第三边,先将数组排序,然后定位最长边与最短边,然后寻找第三条边的数量,第三条边满足:
    最长边 >= 第三条边 > 最长边 - 最短边
    可以利用二分查找寻找最短的第三条边的下标,然后和最长边下标之差就是第三条边的数量
    最后继续定位定位最长边与最短边

    code

    class Solution {
    public:
        /*
         * @param : A list of integers
         * @return: An integer
         */
        int triangleCount(vector<int> S) {
            // write your code here
            int size = S.size();
            if (size <= 0) {
                return 0;
            }
    
            int result = 0;
            sort(S.begin(), S.end());
            for (int i = 0; i < size - 1; i++) {
                for (int j = i + 1; j < size; j++) {
                    int third = S[j] - S[i];
                    int low = i + 1, high = j;
                    while (low < high) {
                        int mid = low + (high - low) / 2;
                        if (S[mid] > third) {
                            high = mid;
                        }
                        else {
                            low = mid + 1;
                        }
                    }
                    result += (j - low);
                }
            }
            return result;
        }
    };
    
  • 相关阅读:
    JS----事件
    JS----计时器
    JS----文档对象模型
    JS----基本数据类型
    JS----函数
    JS----数组
    JS----正则表达式
    CSS----盒子模型与浮动
    Web-9月13日随笔
    Web-9月14日随笔
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7324614.html
Copyright © 2011-2022 走看看