题目描述:

平明伞兵解法:

既然要求满足三角形要求的三边,简单来说,就是最短两边之和大于第三边,所以,第一步Arrays.sort()。先排序,然后直接伞兵暴力法,三重循环。当然最后肯定是能跑出来的,但是复杂度之大。

 思考后的解法:

其实在写暴力的时候,就应该心理有数,我们其实做了许多大量的重复工作,所以可以用排序后的二分查找,以及双指针进行操作。

方法二:二分查找

首先对数组排序。

固定最短的两条边,二分查找最后一个小于两边之和的位置。可以求得固定两条边长之和满足条件的结果。枚举结束后,总和就是答案。

时间复杂度为 O(n^2logn)。

方法三:双指针

首先对数组排序。

固定最长的一条边,运用双指针扫描

如果 nums[l] + nums[r] > nums[i],同时说明 nums[l + 1] + nums[r] > nums[i], ..., nums[r - 1] + nums[r] > nums[i],满足的条件的有 r - l 种,r 左移进入下一轮。

如果 nums[l] + nums[r] <= nums[i],l 右移进入下一轮。

枚举结束后,总和就是答案。

时间复杂度为 O(n^2)

作者:jerring

链接:https://leetcode-cn.com/problems/valid-triangle-number/solution/ming-que-tiao-jian-jin-xing-qiu-jie-by-jerring/

来源:力扣(LeetCode)

方法二:二分查找
首先对数组排序。固定最短的两条边,二分查找最后一个小于两边之和的位置。可以求得固定两条边长之和满足条件的结果。枚举结束后,总和就是答案。时间复杂度为 O(n^2logn)O(n 2 logn)。Java
class Solution {    public int triangleNumber(int[] nums) {        Arrays.sort(nums);        int n = nums.length;        int res = 0;        for (int i = 0; i < n - 2; ++i) {            for (int j = i + 1; j < n - 1; ++j) {                int s = nums[i] + nums[j];                int l = j + 1, r = n - 1;                while (l < r) {                    int mid = l + r + 1 >>> 1;                    if (nums[mid] < s) l = mid;                    else r = mid - 1;                }                if (nums[r] < s) {                    res += r - j;                }            }        }        return res;    }}方法三:双指针
首先对数组排序。固定最长的一条边,运用双指针扫描如果 nums[l] + nums[r] > nums[i],同时说明 nums[l + 1] + nums[r] > nums[i], ..., nums[r - 1] + nums[r] > nums[i],满足的条件的有 r - l 种,r 左移进入下一轮。如果 nums[l] + nums[r] <= nums[i],l 右移进入下一轮。枚举结束后,总和就是答案。时间复杂度为 O(n^2)O(n 2 )。Java
class Solution {    public int triangleNumber(int[] nums) {        Arrays.sort(nums);        int n = nums.length;        int res = 0;        for (int i = n - 1; i >= 2; --i) {            int l = 0, r = i - 1;            while (l < r) {                if (nums[l] + nums[r] > nums[i]) {                    res += r - l;                    --r;                } else {                    ++l;                }            }        }        return res;    }}
作者:jerring链接:https://leetcode-cn.com/problems/valid-triangle-number/solution/ming-que-tiao-jian-jin-xing-qiu-jie-by-jerring/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

leetcode 有效三角形的个数的更多相关文章

  1. LeetCode:有效三角形的个数【611】

    LeetCode:有效三角形的个数[611] 题目描述 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数. 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有 ...

  2. LeetCode 611. 有效三角形的个数(Valid Triangle Number)

    611. 有效三角形的个数 611. Valid Triangle Number 题目描述 LeetCode LeetCode LeetCode611. Valid Triangle Number中等 ...

  3. Leetcode 611.有效三角形的个数

    有效三角形的个数 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数. 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 (使用第一个 ...

  4. Java实现 LeetCode 611 有效三角形的个数(双指针)

    611. 有效三角形的个数 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数. 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 ( ...

  5. 统计无向图中三角形的个数,复杂度m*sqrt(m).

    统计无向图中三角形的个数,复杂度m*sqrt(m). #include<stdio.h> #include<vector> #include<set> #inclu ...

  6. LeetCode 611. Valid Triangle Number有效三角形的个数 (C++)

    题目: Given an array consists of non-negative integers, your task is to count the number of triplets c ...

  7. [LeetCode 120] - 三角形(Triangle)

    问题 给出一个三角形,找出从顶部至底部的最小路径和.每一步你只能移动到下一行的邻接数字. 例如,给出如下三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 从顶部至底部的最 ...

  8. [LeetCode] Triangle 三角形

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...

  9. LeetCode Triangle 三角形(最短路)

    题意:给一个用序列堆成的三角形,第n层的元素个数为n,从顶往下,每个元素可以选择与自己最近的两个下层元素往下走,类似一棵二叉树,求最短路. [], [,4], [6,,7], [4,,8,3] 注意: ...

随机推荐

  1. noip2009 总结

    潜伏者 原题 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则:1. S 国军方内部欲发送的 ...

  2. OO unit4 summary

    Unit4 一.第四单元作业的架构设计 第四单元个人认为主要是考察对于层次结构的理解,即如何理解并处理好UML图的树状结构组织,在理好层次之间以及层次内部的相互关系之后,就只剩下代码实现的问题了.但是 ...

  3. Siamese network总结

    ​前言: 本文介绍了Siamese (连体)网络的主要特点.训练和测试Siamese网络的步骤.Siamese网络的应用场合.Siamese网络的优缺点.为什么Siamese被称为One-shot分类 ...

  4. JavaScript与服务端进行数据交互的方式

    XMLHttpRequest XHR是项古老的技术,不同的浏览器厂商对其实现方式不同,例如有些浏览器只支持onload事件处理器,有些只支持onreadystatechange事件处理器. 发送Get ...

  5. C#进阶学习4--反射(Reflection)

    一.反射的定义 审查元数据并收集关于它的类型信息的能力. 二.基础概念 (1)Assembly:定义和加载程序集,加载在程序集中的所有模块以及从此程序集中查找类型并创建该类型的实例. (2)Modul ...

  6. Vue(11)组件化的基本使用

    前言 有时候有一组html结构的代码,并且这个上面可能还绑定了事件.然后这段代码可能有多个地方都被使用到了,如果都是拷贝来拷贝去,很多代码都是重复的,包括事件部分的代码都是重复的.那么这时候我们就可以 ...

  7. python用random模块模拟抽奖逻辑(print修改end参数使打印结果不分行)

    import random   #引入random模块,运用random函数list_one=["10081","10082","10083" ...

  8. 1、如何通过xstart远程连接桌面

    1.1.安装依赖包: 1.安装语言包: [root@slave-node2 ~]# yum groupinstall -y "Fonts" [root@slave-node2 ~] ...

  9. CRM系统为什么达不到预期效果?

    随着信息技术的发展,企业对于信息化转型的需求越发强烈,而CRM客户关系管理系统成为了企业信息化转型的首选.尽管CRM系统对于企业有着很重要的作用,但有不少企业在选型和实施时遇到了问题,导致CRM系统没 ...

  10. Linux:linux网路路由命令

    查看路由 #查看所有路由信息 route -n 删除路由 #删除路由 route del default 修改路由 #修改路由 #先删除路由 route del default #在新建 route ...