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;
}
};

lintcode-382-三角形计数的更多相关文章

  1. Java实现三角形计数

    题: 解: 这道题考的是穷举的算法. 一开始看到这道题的时候,本能的想到用递归实现.但使用递归的话数据少没问题,数据多了之后会抛栈溢出的异常.我查了一下,原因是使用递归创建了太多的变量, 每个变量创建 ...

  2. Luogu P2807 三角形计数

    题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问题. 输入输出格式 输入 ...

  3. 基于mapreduce实现图的三角形计数

    源代码放在我的github上,想细致了解的可以访问:TriangleCount on github 一.实验要求 1.1 实验背景         图的三角形计数问题是一个基本的图计算问题,是很多复杂 ...

  4. 洛谷 P2807 三角形计数

    P2807 三角形计数 题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问 ...

  5. nvGRAPH三角形计数和遍历示例

    nvGRAPH三角形计数和遍历示例 #include " stdlib.h" #include" inttypes.h" #include" stdi ...

  6. lintcode:数字三角形

    题目: 数字三角形 给定一个数字三角形,找到从顶部到底部的最小路径和.每一步可以移动到下面一行的相邻数字上. 样例 比如,给出下列数字三角形: [      [2],     [3,4],    [6 ...

  7. luogu P2992 [USACO10OPEN]三角形计数Triangle Counting

    https://www.luogu.org/problemnew/solution/P2992 考虑包含原点,不包含原点的三角形有什么特征. 包含原点的三角形:任意找一个顶点和原点连线,一定能把另外两 ...

  8. 611. Valid Triangle Number三角形计数

    [抄题]: 给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形? [暴力解法]: 全部都用for循环 时间分析: 空间分析: [思维问题 ...

  9. 【题解】Luogu P2992 [USACO10OPEN]三角形计数Triangle Counting

    原题传送门 我们考虑进行容斥 包含原点的三角形个数=所有可能三角形的个数-不包含原点三角形的个数 对于每个点,我们会发现:将它与原点连线,在直线左边任选两点或右边任选两点与这个点构成的三角形一定是不包 ...

  10. 3828. 三角形计数 3829. ZCC loves Isaac 3830. 字符消除

    3828 给定n个点的坐标(0<=xi,yi<=10000)求选出任意三个点能组成的三角形的总面积. 题解 太naive了 枚举三角形的y最小的点,把剩余的点按角度排序 然后随便算,可以用 ...

随机推荐

  1. 4. HTML表单标签

    表单是网页中最常见的元素,也是用户和我们交互的重要手段,在网站中的登录.注册.信息更新这些功能都是依赖表单实现的.在HTML中对于表单提供了一系列的标签,即输入框.下拉框.按钮.文本域,如下是一个最常 ...

  2. redis具体使用

    key 命名规则:不可包含空格和\n 创建方式: set  key value values Strings (Binary-safe strings) Lists Sets Sorted sets ...

  3. day 93 Django学习之django自带的contentType表

    Django学习之django自带的contentType表   通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...

  4. 最近最少使用算法(LRU)——页面置换

    原创 上一篇博客写了先进先出算法(FIFO)——页面置换:http://www.cnblogs.com/chiweiming/p/9058438.html 此篇介绍最近最少使用算法(LRU)——页面置 ...

  5. 原生js三级联动

    <!DOCTYPE html> <html lang="en"> <head> <title> 三级联动 </title> ...

  6. python学习之路_字符编码

    字符编码及python中的转码问题,这篇博客讲的比较清楚,python 之路,致那些年,我们依然没搞明白的编码

  7. Makefile:(实验)多个目标匹配时会采用最完整匹配的目标

    结论源自实验测试,如果有疏漏希望指出 当Makefile中存在多个匹配的目标时,Makefile会采用哪个匹配的目标呢? 测试的Makefile如下: .PHONY: all clean quick_ ...

  8. Matlab调用C语言函数

    Matlab调用C语言函数 如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数:double add(double x, double y) { return x + y ;}现在我想要在 ...

  9. 10.11课后练习——MyOD系统调用版本

    MyOD系统调用版本 题目要求 参考教材<深入理解计算机(第三版)>第十章内容 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XX ...

  10. 20155304 2016-2017-2 《Java程序设计》第十周学习总结

    20155304 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是 ...