LeetCode - 611 - Valid Triangle Number

发布于 2024-07-15 13:10:53 字数 1656 浏览 15 评论 0

题目大意

给定一个包含非负整数的数组,统计其中可以组成三角形三条边的三元组个数。

解析

很巧妙的方法,使用贪心:

  • 先对数组排序(升序降序都可以,这里按照升序排列);
  • 然后初始化 c=num.length - 1b = c-1a = 0 ,然后如果 arr[a] + arr[b] > arr[c] ,那么所有 arr[a ~ b-1]arr[b]arr[c] 之间都可以构成三角形,所以可以加上 b-a 个;
  • 否则说明 a 小了,就让 a++ ,知道 a == b 退出;

class Solution {
  public int triangleNumber(int[] nums) {
    if(nums == null || nums.length < 3)
      return 0;
    int res = 0;
    Arrays.sort(nums);
    for(int c = nums.length-1; c >= 2; c--){
      for(int b = c-1; b >= 1; b--){
        int a = 0;
        while(a < b){
          if(nums[a] + nums[b] > nums[c]){
            res += b-a;
            break;
          }
          a++;
        }
      }
    }
    return res;
  }
}
class Solution {
  // more fast
  public int triangleNumber(int[] nums) {
    if(nums == null || nums.length < 3)
      return 0;
    int res = 0;
    Arrays.sort(nums);
    for(int c = nums.length-1; c >= 2; c--){
      int a = 0,b = c-1;
      while(a < b){
        if(nums[a] + nums[b] > nums[c]){
          res += b-a;
          b--;
        }else a++;
      }
    }
    return res;
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

太阳哥哥

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

玍銹的英雄夢

文章 0 评论 0

我不会写诗

文章 0 评论 0

十六岁半

文章 0 评论 0

浸婚纱

文章 0 评论 0

qq_kJ6XkX

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文