0
点赞
收藏
分享

微信扫一扫

有效三角形的个数

攻城狮Chova 2021-09-21 阅读 77
今日算法
题目描述:
示例 1:
题目分析:
  • 要组成三角形,则需要满足两边之和大于第三边,也就是作为三角形3边的三个元素,任意两个之和,必须大于第三个元素 。
思路一:
代码实现
class Solution {
    public int result = 0;
    public int triangleNumber(int[] nums) {
        Arrays.sort(nums);
        int len = nums.length - 1;
        for (int i = 0; i <= len - 2; i++) {
            for (int j = i + 1; j <= len - 1; j++) {
                sum(nums, i, j, len);
            }
        }
        return result;
    }
    public void sum(int[] nums, int i, int j, int len) {
        int q = j + 1;
        while (q <= len && nums[i] + nums[j] > nums[q]) {
            q++;
            result++;
        }
    }
}
思路二:
代码实现:
class Solution {
    public int result = 0;
    public int triangleNumber(int[] nums) {
        Arrays.sort(nums);
        int len = nums.length - 1;
        for (int i = 0; i <= len - 2; i++) {
            for (int j = i + 1; j <= len - 1; j++) {
                sum(nums, i, j, len);
            }
        }
        return result;
    }
    public void sum(int[] nums, int i, int j, int len) {
        int q = j + 1;
        int left = q, right = len, index = j;   
        while (left <= right) {
            int mid = (left + right) / 2;
            if (nums[mid] < nums[i] + nums[j]) {
                index = mid;
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
         result += index - j;
    }
}
思路三
代码实现:
class Solution {
    public int result = 0;
    public int triangleNumber(int[] nums) {
        Arrays.sort(nums);
        int len = nums.length - 1;
        for (int i = 0; i <= len - 2; i++) {
            int q = i + 1;
            for (int j = i + 1; j <= len - 1; j++) {
                 while ((q + 1) <= len && nums[i] + nums[j] > nums[q + 1]) {
                     q++;
                }
                q = q > j ? q : j; // 防止一个满足条件的都没有
                result += q - j;
            }
        }
        return result;
    }
}
举报

相关推荐

0 条评论