Triangle Count

Given an array of integers, how many three numbers can be found in the array, so that we can build an triangle whose three edges length is the three numbers that we find?

Given array S = [3,4,6,7], return 3. They are:

[3,4,6]
[3,6,7]
[4,6,7]

Given array S = [4,4,4,4], return 4. They are:

[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上的一道题目,刚开始看到并没有什么思路,仔细分析下还是可以看到解题思路的。已知三条边a,b,c,则判断它们能不能组成三角形的条件是:a + b> c&&

a + c > b && b + c > a。约束条件还是非常多的。 但是如果 a,b,c已经排序,比如a<b<c, 则只需判断a+b > c。大大简化约束。所以这题可以对数组先进行排序。

之后我们相对固定第三条边,然后用双指针进行另外两条边的扫描,寻找a + b > c的 <a,b> pair。这步其实就是Two Sum II所要做的事情。从右往左扫第三条边,在其左边的数组用双指针查找合格pair。代码如下:

class Solution:
    # @param S: a list of integers
    # @return: a integer
    def triangleCount(self, S):
        if not S or len(S) < 3:
            return 0
        S.sort()
        res = 0
        for i in xrange(len(S)-1, 1 ,-1):
            left = 0
            right = i -1
            while left < right:
                if S[left] + S[right] > S[i]:
                    res += right - left
                    right -= 1
                else:
                    left += 1
        return res

排序时间复杂度为O(nlogn)。其后的时间复杂度为O(n^2)。所以总体的时间复杂度为O(n^2),空间复杂度为O(1)。

时间: 2024-10-14 06:42:50

Triangle Count的相关文章

【Lintcode】382.Triangle Count

题目: Given an array of integers, how many three numbers can be found in the array, so that we can build an triangle whose three edges length is the three numbers that we find? Example Given array S = [3,4,6,7], return 3. They are: [3,4,6] [3,6,7] [4,6

LintCode Triangle Count

原题链接在这里:http://www.lintcode.com/en/problem/triangle-count/# 题目: Given an array of integers, how many three numbers can be found in the array, so that we can build an triangle whose three edges length is the three numbers that we find? Example Given a

九章算法 基础算法 强化算法 系统设计 大数据 安卓 leetcode 高清视频

leetcode 直播视频讲座录像 九章算法视频录像,PPT 算法班,算法强化班,Java入门与基础算法班,big data项目实战班,Andriod项目实战班 九章算法下载 九章算法面试 九章算法leetcode 九章算法答案 九章算法mitbbs 九章算法班 九章算法ppt 九章算法录像 九章算法培训 九章算法微博 leetcode 视频 九章算法偷录 算法培训 算法班课程大纲: 1 从strStr谈面试技巧与Coding Style(免费试听) 2 二分搜索与旋转排序数组 Binary S

微软Hololens学院教程-Hologram 230-空间映射(Spatial mapping )

空间映射地图是将真实环境的环境信息扫描到设备中,使得全息对象可以识别真实场景环境,从而达到可以将虚拟对象与真实世界相结合的效果.这节教程主要学习内容如下: 使用Hololens扫描空间环境并将空间数据导入到开发计算机中. 学习利用shader给空间网格赋予材质以便其更容易被发现. 使用网格处理方法将网格变成简单的平面. 对全息对象可以放置的位置进行放置提醒,使得用户更容易的放置. 开发遮挡效果,即当全息对象被真实场景中的物体遮挡时,你仍然可以看见它,只不过它是线框模式的. 项目文件: Downl

明风:分布式图计算的平台Spark GraphX 在淘宝的实践

快刀初试:Spark GraphX在淘宝的实践 作者:明风 (本文由团队中梧苇和我一起撰写,并由团队中的林岳,岩岫,世仪等多人Review,发表于程序员的8月刊,由于篇幅原因,略作删减,本文为完整版) 对于网络科学而言,世间万物都可以抽象成点,而事物之间的关系都可以抽象成边,并根据不同的应用场景,生成不同的网络,因此整个世界都可以用一个巨大的复杂网络来代表.有关复杂网络和图算法的研究,在最近的十几年取得了巨大的进展,并在多个领域有重要的应用. 作为最大的电商平台,淘宝上数亿买家和卖家,每天产生数

Spark Graphx编程指南

问题导读 1.GraphX提供了几种方式从RDD或者磁盘上的顶点和边集合构造图?2.PageRank算法在图中发挥什么作用?3.三角形计数算法的作用是什么? Spark中文手册-编程指南Spark之一个快速的例子Spark之基本概念Spark之基本概念Spark之基本概念(2)Spark之基本概念(3)Spark-sql由入门到精通Spark-sql由入门到精通续spark GraphX编程指南(1) Pregel API 图本身是递归数据结构,顶点的属性依赖于它们邻居的属性,这些邻居的属性又依

Project Euler:Problem 61 Cyclical figurate numbers

Triangle, square, pentagonal, hexagonal, heptagonal, and octagonal numbers are all figurate (polygonal) numbers and are generated by the following formulae: Triangle   P3,n=n(n+1)/2   1, 3, 6, 10, 15, ... Square   P4,n=n2   1, 4, 9, 16, 25, ... Penta

强化第一章

1 Two Sum public int[] twoSum(int[] numbers, int target) { int[] res = {-1, -1}; if (numbers == null || numbers.length < 2) { return res; } Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < numbers.length; i++) { if (map.c

Gazebo機器人仿真學習探索筆記(三)機器人模型

gazebo_models:https://bitbucket.org/osrf/gazebo_models 模型庫下載,可以參考如下命令: ~/Rob_Soft/Gazebo7$ hg clone https://bitbucket.org/osrf/gazebo_models 下載更改目錄下載到指定文件夾中. 模型庫的結構 目錄 配置等可以參考官方文檔,注意model.sdf. 當然也可以將自己制作的模型上傳到庫中,文檔中也有具體說明. code$ hg clone https://[ema