题目:给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。

示例 1:

输入: [2,2,3,4]
输出: 3
解释:
有效的组合是:
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3

思路一:

要能构成三角形,需要保证任意两边之和大于第三边,那么可以对输入的数组先进行排序,这样只需要保证小的两边之和大于第三边即可。

代码:

public int triangleNumber(int[] nums) {Arrays.sort(nums);int result= 0;if (nums.length < 3) {return 0;}for (int i = 0; i <= nums.length - 3; i++) {for (int j = i+1;j<= nums.length -2;j++) {for (int k = j +1; k <= nums.length -1;k++) {if (nums[i] + nums [j] > nums[k]) {result +=1;}}}}return result;}

思路二:
将数组 nums 进行升序排序,随后使用二重循环枚举 aa 和 bb。设 a = nums[i], b = nums[j],为了防止重复统计答案,我们需要保证 i <j。剩余的边 cc 需要满足 c < a + b,我们可以在 [j + 1, n - 1][j+1,n−1] 的下标范围内使用二分查找,找出最大的满足 条件 的下标 kk,这样一来,在 [j + 1, k][j+1,k] 范围内的下标都可以作为边 cc 的下标,我们将该范围的长度 k - jk−j 累加入答案。

public int triangleNumber(int[] nums) {int n = nums.length;Arrays.sort(nums);int ans = 0;for (int i = 0; i < n; ++i) {for (int j = i + 1; j < n; ++j) {int left = j + 1, right = n - 1, k = j;while (left <= right) {int mid = (left + right) / 2;if (nums[mid] < nums[i] + nums[j]) {k = mid;left = mid + 1;} else {right = mid - 1;}}ans += k - j;}}return ans;}

【刷题第七天】leetcode611.有效三角形的个数相关推荐

  1. C语言百日刷题第七天

    C语言百日刷题第七天 61. 写一个函数isPowerOfTwo判断是不是2的幂次方 62. 写一个函数isPowerOfThree判断是不是3的幂次方 63.n 的第 k 个因子 64.有效的完全平 ...

  2. LeetCode刷题第七天

    LeetCode刷题记录 1.合并两个排序的链表 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 ...

  3. 算法刷题-数论-试除法求约数、约数个数、约数之和、最大公约数(辗转相除法)

    文章目录 acwing869. 试除法求约数 acwing870. 约数个数 acwing871. 约数之和 acwing872. 最大公约数 acwing869. 试除法求约数 acwing869. ...

  4. LeetCode刷题(45)~位1的个数【布赖恩·克尼根算法】

    题目描述 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量). 示例 1: 输入:00000000000000000000000000001011 ...

  5. [Swift]LeetCode611. 有效三角形的个数 | Valid Triangle Number

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  6. ​LeetCode刷题实战488:祖玛游戏

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  7. C语言百日刷题第二天

    C语言百日刷题第二天 11. 统计输入数据的正负个数 12.学生基本信息输入输出 13.杨辉三角的前n行 14.模拟用户登录情景 15.演示多个字符从两端移动,向中间汇聚 16.计算短信费用 17.编 ...

  8. 洛谷刷题C语言:数字反转、再分肥皂水、三角形面积、Apples Prologue/苹果和虫子、数的性质

    记录洛谷刷题QAQ,一些不大优雅的代码 一.[深基2.例7]数字反转 题目描述 输入一个不小于 100100100 且小于 100010001000,同时包括小数点后一位的一个浮点数,例如 123.4 ...

  9. pythone二级题库 + 刷题软件 (超详细解析,看完必过) 第七套

    刷 题软件(模拟python二级考试) 操作题刷题软件 公众h:露露IT 回复:python二级 1.选择题 1.树的度为3,且有9个度为3的结点,5个度为1的结点,但没有度为2的结点.则该树中的叶子 ...

  10. ACM比赛经验、刷题记录及模板库总结(更新中)

    前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...

最新文章

  1. 最新版IDEA常用配置指南,打造你的最酷IDE
  2. editplus替换空白行的正则表达式
  3. idea 升级到2020后 无法启动_i.MXRT软复位后无法从32MB Flash启动?
  4. 微头条败走,多闪殿后,字节跳动的社交梦依旧难圆
  5. 自定义idea archetype
  6. 限制会话id服务端不共享_不懂 Zookeeper?看完不懂你打我
  7. 前后端分离工程实现 (VUE、JAVA)、附全部源码
  8. CSS浏览器兼容性与解决方法
  9. thinkphp3.2 cli模式的正确使用方法
  10. mysql 1054 42s22_MySQL 触发器的坑:ERROR 1054 (42S22): Unknown column 'xxx' in 'field list'
  11. 哈佛机器人,学会了轻功水上漂
  12. myeclipse里使用fat jar生成可执行jar
  13. 手动同步OCS的通讯簿
  14. 异步Udp监听关闭 出现异常,访问已释放的资源或者其他错误的解决方法
  15. Java 接入微信小程序-登录+支付完整流程实战(环境搭建+源码),网友:看完后秒懂!...
  16. 基于python的MUSIC算法
  17. Secondary Maps (Detail Maps) Detail Mask 二级贴图(细节贴图)细节遮罩 Standard Shader系列14
  18. gnuplot绘图教程(一)
  19. C语言(##)连接符号的简单使用
  20. 什么时候?才可以千秋万代一统江湖!!!

热门文章

  1. 十分钟了解websql和indexedDB
  2. IDEA多款主题颜色推荐!炫酷经典!
  3. 众达两化融合贯标日记06~贯标启动会PPT
  4. 效率提升总结-Unity 项目规范文档 【建议收藏】
  5. v8声卡怎么录制唱歌_直播声卡怎么连接V8 V8声卡连接方法教程
  6. linux 安装tomcat8和 treeNMS部署
  7. 题2.pta数据结构题集-File Transfer (25分)
  8. winrar软件如何测试
  9. SOEM主站开发笔记-- 点亮第一个LED----SOEM 的simpletest.c代码的解析以及改动
  10. 目前为止最全的微信小程序项目实例