[LeetCode 611] Valid Triangle Number
来源:互联网 发布:js返回顶部 编辑:程序博客网 时间:2024/06/15 19:27
- Question
Given an array consists of non-negative integers, your task is to count the number of triplets chosen from the array that can make triangles if we take them as side lengths of a triangle.
Example 1:Input: [2,2,3,4]Output: 3Explanation:Valid combinations are: 2,3,4 (using the first 2)2,3,4 (using the second 2)2,2,3
思路
能做三角形的边要满足- 两边之和大于第三边。
- 两边之差小于第三边。
如果三个数满足: a<=b<=c;
那么只要这三个数满足 a+b>c , 就必然满足 c-b < a 、c-a < b 和 b-a < c.
这三个数就是符合条件的一组数。
在对数组排序后, 从前面取出两个数 a, b, 用二分查找在之后找到满足a+b > c的 最大的 c。- 代码如下:
int triangleNumber(vector<int>& nums) { int ret = 0; if (nums.size() > 2) { sort(nums.begin(), nums.end()); for (int i = 0; i < nums.size() - 2; i++) { int j = i + 1; while (j < nums.size() - 1) { int sum=nums[i] + nums[j]; int left=j+1, right=nums.size(); //right不能取nums.size()-1, 因为left=rigth+1 并且nums[left] 和nums[right] 同时满足条件时时,就无法取到right了 if(sum>nums[left]){ while (left +1 < right ) { int mid=(left+right)/2; if(nums[mid]>=sum) right=mid; else left=mid; } ret+=(left-j); } j++; } } } return ret;}
阅读全文
0 0
- [LeetCode 611] Valid Triangle Number
- leetCode-Valid Triangle Number
- [LeetCode]611. Valid Triangle Number
- [LeetCode] 611. Valid Triangle Number
- [leetcode]611. Valid Triangle Number
- leetcode 611. Valid Triangle Number
- [leetcode] 611. Valid Triangle Number
- Leetcode:611. Valid Triangle Number
- leetcode 611. Valid Triangle Number
- Leetcode算法学习日志-611 Valid Triangle Number
- 【LeetCode】611.Valid Triangle Number解题报告
- Leetcode之Valid Triangle Number 问题
- 611. Valid Triangle Number
- leetcode611: Valid Triangle Number
- 611. Valid Triangle Number
- 611. Valid Triangle Number
- leetcode611. Valid Triangle Number
- 611. Valid Triangle Number
- 基于J2EE的管理信息系统之简单jsp实现增删改查(一)
- jsp状态
- Ubuntu 16.04 compile JDK source code
- 【linux 常用命令】linux命令大全
- 第八课,线性表的链式存储结构
- [LeetCode 611] Valid Triangle Number
- Java学习笔记-《Java程序员面试宝典》-第四章基础知识-4.7输入输出流(4.7.1-4.7.3)
- 51 nod 1188 最大公约数之和 V2(狄利克雷卷积+线性筛法)
- java学习 jstl中if标签的使用
- mybatis一级缓存问题导致第二次查询结果出现变化
- 如何根据某个实体属性字段的不同值来设置另一个实体属性字段的值
- js:制作一个简易的计数器:根据输入的两个整数和运算符,进行计算,然后输出计算结果
- 深入理解Javascript的继承和原型链
- 【脚本语言系列】关于PythonWeb服务器Nginx+uWSGI,你需要知道的事